#include <TFile.h>
#include <TGrid.h>
#include <TClonesArray.h>
#include <TMath.h>
#include <TVirtualFitter.h>
#include <TGeoManager.h>
#include <TSystem.h>
#include <TRandom.h>
#include <TCollection.h>
#include <TGeoPhysicalNode.h>
#include <TMap.h>
#include <TObjString.h>
#include <TString.h>
#include "AliITSAlignMille2.h"
#include "AliITSgeomTGeo.h"
#include "AliGeomManager.h"
#include "AliMillePede2.h"
#include "AliTrackPointArray.h"
#include "AliAlignObjParams.h"
#include "AliLog.h"
#include "AliTrackFitterRieman.h"
#include "AliITSAlignMille2Constraint.h"
#include "AliITSAlignMille2ConstrArray.h"
#include "AliITSresponseSDD.h"
#include "AliITSTPArrayFit.h"
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCDBEntry.h"
#include "AliITSsegmentationSDD.h"
#include "AliITSDriftSpeedArraySDD.h"
#include "AliITSCorrectSDDPoints.h"
#include "AliESDVertex.h"
ClassImp(AliITSAlignMille2)
const Char_t* AliITSAlignMille2::fgkRecKeys[] = {
"OCDB_PATH",
"OCDB_SPECIFIC",
"GEOMETRY_FILE",
"SUPERMODULE_FILE",
"CONSTRAINTS_REFERENCE_FILE",
"PREALIGNMENT_FILE",
"PRECALIBSDD_FILE",
"PREVDRIFTSDD_FILE",
"PRECORRMAPSDD_FILE",
"INITCORRMAPSDD_FILE",
"INITCALBSDD_FILE",
"INITVDRIFTSDD_FILE",
"INITDELTA_FILE",
"INITGEOM_FILE",
"SET_GLOBAL_DELTAS",
"CONSTRAINT_LOCAL",
"MODULE_VOLUID",
"MODULE_INDEX",
"SET_PSEUDO_PARENTS",
"SET_TRACK_FIT_METHOD",
"SET_MINPNT_TRA",
"SET_NSTDDEV",
"SET_RESCUT_INIT",
"SET_RESCUT_OTHER",
"SET_LOCALSIGMAFACTOR",
"SET_STARTFAC",
"SET_FINALFAC",
"SET_B_FIELD",
"SET_SPARSE_MATRIX",
"REQUIRE_POINT",
"CONSTRAINT_ORPHANS",
"CONSTRAINT_SUBUNITS",
"APPLY_CONSTRAINT",
"SET_EXTRA_CLUSTERS_MODE",
"SET_USE_TPAFITTER",
"SET_USE_LOCAL_YERROR",
"SET_MIN_POINTS_PER_MODULE",
"SET_USE_SDDVDCORRMULT",
"SET_WEIGHT_PT",
"SET_USE_DIAMOND",
"CORRECT_DIAMOND",
"SET_USE_VERTEX",
"SET_SAME_SDDT0"
};
const Char_t AliITSAlignMille2::fgkXYZ[] = "XYZ";
AliITSAlignMille2* AliITSAlignMille2::fgInstance = 0;
Int_t AliITSAlignMille2::fgInstanceID = 0;
AliITSAlignMille2::AliITSAlignMille2(const Char_t *configFilename,TList *userInfo )
: TObject(),
fMillepede(0),
fStartFac(16.),
fFinalFac(1.),
fResCutInitial(100.),
fResCut(100.),
fNGlobal(0),
fNLocal(4),
fNStdDev(3),
fIsMilleInit(kFALSE),
fAllowPseudoParents(kFALSE),
fTPAFitter(0),
fCurrentModule(0),
fTrack(0),
fTrackBuff(0),
fCluster(),
fCurrentSensID(-1),
fClusLoc(12*3),
fClusGlo(12*3),
fClusSigLoc(12*3),
fGlobalDerivatives(0),
fMeasLoc(0),
fMeasGlo(0),
fSigmaLoc(0),
fConstrPT(-1),
fConstrPTErr(-1),
fConstrCharge(0),
fRunID(0),
fMinNPtsPerTrack(3),
fIniTrackParamsMeth(1),
fTotBadLocEqPoints(0),
fRieman(0),
fConstraints(0),
fCacheMatrixOrig(kMaxITSSensID+1),
fCacheMatrixCurr(kMaxITSSensID+1),
fUseGlobalDelta(kFALSE),
fTempExcludedModule(-1),
fUserProvided(0),
fIniUserInfo(userInfo),
fIniGeomPath(""),
fIniDeltaPath(""),
fIniSDDRespPath(""),
fPreCalSDDRespPath(""),
fIniSDDVDriftPath(""),
fPreSDDVDriftPath(""),
fIniSDDCorrMapPath(""),
fPreSDDCorrMapPath(""),
fConvertPreDeltas(kFALSE),
fGeometryPath(""),
fPreDeltaPath(""),
fConstrRefPath(""),
fDiamondPath(""),
fGeoManager(0),
fIsConfigured(kFALSE),
fPreAlignQF(0),
fIniRespSDD(0),
fPreRespSDD(0),
fIniVDriftSDD(0),
fPreVDriftSDD(0),
fIniCorrMapSDD(0),
fPreCorrMapSDD(0),
fSegmentationSDD(0),
fPrealignment(0),
fConstrRef(0),
fMilleModule(2),
fSuperModule(2),
fNModules(0),
fNSuperModules(0),
fUsePreAlignment(kFALSE),
fUseLocalYErr(kFALSE),
fBOn(kFALSE),
fBField(0.0),
fDataType(kCosmics),
fMinPntPerSens(0),
fBug(0),
fMilleVersion(2),
fExtraClustersMode(0),
fTrackWeight(1),
fWeightPt(0.),
fIsSDDVDriftMult(kFALSE),
fDiamond(),
fDiamondI(),
fUseDiamond(kFALSE),
fUseVertex(kFALSE),
fVertexSet(kFALSE),
fDiamondPointID(-1),
fDiamondModID(-1),
fCheckDiamondPoint(kDiamondCheckIfPrompt),
fFixCurvIfConstraned(kTRUE),
fCurvFitWasConstrained(kFALSE),
fConvAlgMatOld(100)
{
for (int i=3;i--;) fSigmaFactor[i] = 1.0;
for (int i=0;i<3;i++) {
fCorrDiamond[i] = 0;
}
for (int itp=0;itp<kNDataType;itp++) {
fRequirePoints[itp] = kFALSE;
for (Int_t i=0; i<6; i++) {
fNReqLayUp[itp][i]=0;
fNReqLayDown[itp][i]=0;
fNReqLay[itp][i]=0;
}
for (Int_t i=0; i<3; i++) {
fNReqDetUp[itp][i]=0;
fNReqDetDown[itp][i]=0;
fNReqDet[itp][i]=0;
}
}
fDiamond.SetVolumeID(kVtxSensVID);
fDiamondI.SetVolumeID(kVtxSensVID);
float xyzd[3] = {0,0,0};
float covd[6] = {1,0,0,1,0,1e4};
fDiamond.SetXYZ(xyzd,covd);
covd[5] = 1e-4;
fDiamondI.SetXYZ(xyzd,covd);
Int_t lc=LoadConfig(configFilename);
if (lc) {
AliError(Form("Error %d loading configuration from %s",lc,configFilename));
exit(1);
}
fMillepede = new AliMillePede2();
fgInstance = this;
fgInstanceID++;
ResetCovIScale();
}
AliITSAlignMille2::~AliITSAlignMille2()
{
delete fMillepede;
delete[] fGlobalDerivatives;
delete fRieman;
delete fPrealignment;
delete fConstrRef;
delete fPreRespSDD;
delete fIniRespSDD;
delete fSegmentationSDD;
delete fIniVDriftSDD;
delete fPreVDriftSDD;
delete fIniCorrMapSDD;
delete fPreCorrMapSDD;
delete fTPAFitter;
fCacheMatrixOrig.Delete();
fCacheMatrixCurr.Delete();
fTrackBuff.Delete();
fConstraints.Delete();
fMilleModule.Delete();
fSuperModule.Delete();
if (--fgInstanceID==0) fgInstance = 0;
}
TObjArray* AliITSAlignMille2::GetConfigRecord(FILE* stream, TString& recTitle, TString& recOpt, Bool_t rew)
{
TString record;
static TObjArray* recElems = 0;
if (recElems) {delete recElems; recElems = 0;}
recOpt = "";
TString keyws = recTitle;
if (!keyws.IsNull()) {
keyws.ToUpper();
}
while (record.Gets(stream)) {
int cmt=record.Index("#");
if (cmt>=0) record.Remove(cmt);
record.ReplaceAll("\t"," ");
record.ReplaceAll("\r"," ");
record.Remove(TString::kBoth,' ');
if (record.IsNull()) continue;
if (!keyws.IsNull() && !record.BeginsWith(keyws.Data())) continue;
recElems = record.Tokenize(" ");
recTitle = recElems->At(0)->GetName();
recTitle.ToUpper();
recOpt = recElems->GetLast()>0 ? recElems->At(1)->GetName() : "";
break;
}
if (rew || !recElems) rewind(stream);
return recElems;
}
Int_t AliITSAlignMille2::CheckConfigRecords(FILE* stream)
{
TString record,recTitle;
int lineCnt = 0;
rewind(stream);
while (record.Gets(stream)) {
int cmt=record.Index("#");
lineCnt++;
if (cmt>=0) record.Remove(cmt);
record.ReplaceAll("\t"," ");
record.ReplaceAll("\r"," ");
record.Remove(TString::kBoth,' ');
if (record.IsNull()) continue;
int spc = record.Index(" ");
if (spc>0) recTitle = record(0,spc);
else recTitle = record;
recTitle.ToUpper();
Bool_t strOK = kFALSE;
for (int ik=kNKeyWords;ik--;) if (recTitle == fgkRecKeys[ik]) {strOK = kTRUE; break;}
if (strOK) continue;
AliError(Form("Unknown keyword %s at line %d",
recTitle.Data(),lineCnt));
return -1;
}
rewind(stream);
return 0;
}
Int_t AliITSAlignMille2::LoadConfig(const Char_t *cfile)
{
AliInfo(Form("Loading MillePede2 configuration from %s",cfile));
AliCDBManager::Instance()->SetCacheFlag(kFALSE);
FILE *pfc=fopen(cfile,"r");
if (!pfc) return -1;
TString record,recTitle,recOpt,recExt;
Int_t nrecElems,irec;
TObjArray *recArr=0;
fNModules = 0;
Bool_t stopped = kFALSE;
if (CheckConfigRecords(pfc)<0) return -1;
while(1) {
recTitle = fgkRecKeys[kOCDBDefaultPath];
if ( GetConfigRecord(pfc,recTitle,recOpt,1) && !recOpt.IsNull() ) {
AliInfo(Form("Configuration sets OCDB default storage to %s",recOpt.Data()));
AliCDBManager::Instance()->SetDefaultStorage( gSystem->ExpandPathName(recOpt.Data()) );
TObjString* objStr = (TObjString*)AliCDBManager::Instance()->GetStorageMap()->GetValue("default");
if (!objStr) {stopped = kTRUE; break;}
objStr->SetUniqueID(1);
}
if (fIniUserInfo && ProcessUserInfo(fIniUserInfo)) { AliError("Failed to process intial User Info"); stopped = kTRUE; break;}
recTitle = fgkRecKeys[kGeomFile];
if ( GetConfigRecord(pfc,recTitle,recOpt,1) ) fGeometryPath = gSystem->ExpandPathName(recOpt.Data());
if ( LoadGeometry(fGeometryPath) ) { AliError("Failed to find/load target ideal Geometry"); stopped = kTRUE; break;}
recTitle = fgkRecKeys[kTPAFitter];
if ( GetConfigRecord(pfc,recTitle,recOpt,1) ) fTPAFitter = new AliITSTPArrayFit(kNLocal);
recTitle = fgkRecKeys[kSuperModileFile];
if ( !GetConfigRecord(pfc,recTitle,recOpt,1) ||
recOpt.IsNull() ||
gSystem->ExpandPathName(recOpt) ||
gSystem->AccessPathName(recOpt.Data()) ||
LoadSuperModuleFile(recOpt.Data()))
{ AliError("Failed to find/load SuperModules"); stopped = kTRUE; break;}
recTitle = fgkRecKeys[kConstrRefFile];
if ( (recArr = GetConfigRecord(pfc,recTitle,recOpt,1)) ) {
if (recOpt.IsNull() || recOpt=="IDEAL") SetConstraintWrtRef( "IDEAL" );
else {
for (int i=2;i<=recArr->GetLast();i++) {recOpt += " "; recOpt += recArr->At(i)->GetName();}
if ( SetConstraintWrtRef(recOpt.Data()) )
{ AliError("Failed to load reference deltas for local constraints"); stopped = kTRUE; break;}
}
}
recTitle = fgkRecKeys[kInitGeomFile];
if ( (recArr = GetConfigRecord(pfc,recTitle,recOpt,1)) && !recOpt.IsNull() ) {
for (int i=2;i<=recArr->GetLast();i++) {recOpt += " "; recOpt += recArr->At(i)->GetName();}
fIniGeomPath = recOpt;
gSystem->ExpandPathName(fIniGeomPath);
fUserProvided |= kSameInitGeomBit;
AliInfo(Form("Configuration sets Production Geometry to %s",fIniGeomPath.Data()));
}
if (fIniGeomPath.IsNull()) fIniGeomPath = fGeometryPath;
recTitle = fgkRecKeys[kInitDeltaFile];
if ( (recArr = GetConfigRecord(pfc,recTitle,recOpt,1)) && !recOpt.IsNull() ) {
for (int i=2;i<=recArr->GetLast();i++) {recOpt += " "; recOpt += recArr->At(i)->GetName();}
fIniDeltaPath = recOpt;
gSystem->ExpandPathName(fIniDeltaPath);
fUserProvided |= kSameInitDeltasBit;
AliInfo(Form("Configuration sets Production Deltas to %s",fIniDeltaPath.Data()));
}
recTitle = fgkRecKeys[kPreDeltaFile];
if ( (recArr = GetConfigRecord(pfc,recTitle,recOpt,1)) ) {
if (!recOpt.IsNull()) {
for (int i=2;i<=recArr->GetLast();i++) {recOpt += " "; recOpt += recArr->At(i)->GetName();}
fPreDeltaPath = recOpt;
gSystem->ExpandPathName(fPreDeltaPath);
}
else if (!fIniDeltaPath.IsNull()) {
AliInfo("PreAlignment Deltas keyword is present but empty, will set to Init Deltas of the first tree");
fPreDeltaPath = fIniDeltaPath;
if (fIniGeomPath != fGeometryPath) fConvertPreDeltas = kTRUE;
}
AliInfo(Form("Configuration sets PreAlignment Deltas to %s",fPreDeltaPath.Data()));
}
if (CacheMatricesOrig()) {stopped = kTRUE; break;}
if (!fPreDeltaPath.IsNull()) {
if (fConvertPreDeltas) ConvertDeltas();
else if (LoadDeltas(fPreDeltaPath,fPrealignment)) {stopped = kTRUE; break;}
}
if (fPrealignment && ApplyToGeometry()) {stopped = kTRUE; break;}
recTitle = fgkRecKeys[ kInitCalSDDFile ];
if ( (recArr = GetConfigRecord(pfc,recTitle,recOpt,1)) && !recOpt.IsNull()) {
for (int i=2;i<=recArr->GetLast();i++) {recOpt += " "; recOpt += recArr->At(i)->GetName();}
fIniSDDRespPath = recOpt;
gSystem->ExpandPathName(fIniSDDRespPath);
fUserProvided |= kSameInitSDDRespBit;
AliInfo(Form("Configuration sets Production SDD Response to %s",fIniSDDRespPath.Data()));
}
if (LoadSDDResponse(fIniSDDRespPath, fIniRespSDD) ) {stopped = kTRUE; break;}
recTitle = fgkRecKeys[ kInitCorrMapSDDFile ];
if ( (recArr = GetConfigRecord(pfc,recTitle,recOpt,1)) && !recOpt.IsNull()) {
for (int i=2;i<=recArr->GetLast();i++) {recOpt += " "; recOpt += recArr->At(i)->GetName();}
fIniSDDCorrMapPath = recOpt;
gSystem->ExpandPathName(fIniSDDCorrMapPath);
fUserProvided |= kSameInitSDDCorrMapBit;
AliInfo(Form("Configuration sets Production SDD Correction Map to %s",fIniSDDCorrMapPath.Data()));
}
if (LoadSDDCorrMap(fIniSDDCorrMapPath, fIniCorrMapSDD) ) {stopped = kTRUE; break;}
recTitle = fgkRecKeys[kPreCalSDDFile];
if ( (recArr = GetConfigRecord(pfc,recTitle,recOpt,1)) ) {
if (!recOpt.IsNull()) {
for (int i=2;i<=recArr->GetLast();i++) {recOpt += " "; recOpt += recArr->At(i)->GetName();}
fPreCalSDDRespPath = recOpt;
gSystem->ExpandPathName(fPreCalSDDRespPath);
}
else if (!fIniSDDRespPath.IsNull()) {
AliInfo("PreCalibration SDD response keyword is present but empty, will set to Init SDD repsonse");
fPreCalSDDRespPath = fIniSDDRespPath;
}
AliInfo(Form("Configuration sets PreCalibration SDD Response to %s",fPreCalSDDRespPath.Data()));
}
if (LoadSDDResponse(fPreCalSDDRespPath, fPreRespSDD) ) {stopped = kTRUE; break;}
recTitle = fgkRecKeys[kPreCorrMapSDDFile];
if ( (recArr = GetConfigRecord(pfc,recTitle,recOpt,1)) ) {
if (!recOpt.IsNull()) {
for (int i=2;i<=recArr->GetLast();i++) {recOpt += " "; recOpt += recArr->At(i)->GetName();}
fPreSDDCorrMapPath = recOpt;
gSystem->ExpandPathName(fPreSDDCorrMapPath);
}
else if (!fIniSDDCorrMapPath.IsNull()) {
AliInfo("PreCalibration SDD Correction Map keyword is present but empty, will set to Init SDD Correction Map");
fPreSDDCorrMapPath = fIniSDDCorrMapPath;
}
AliInfo(Form("Configuration sets PreCalibration SDD Correction Map to %s",fPreSDDCorrMapPath.Data()));
}
if (LoadSDDCorrMap(fPreSDDCorrMapPath, fPreCorrMapSDD) ) {stopped = kTRUE; break;}
recTitle = fgkRecKeys[ kInitVDriftSDDFile ];
if ( (recArr = GetConfigRecord(pfc,recTitle,recOpt,1)) && !recOpt.IsNull()) {
for (int i=2;i<=recArr->GetLast();i++) {recOpt += " "; recOpt += recArr->At(i)->GetName();}
fIniSDDVDriftPath = recOpt;
gSystem->ExpandPathName(fIniSDDVDriftPath);
fUserProvided |= kSameInitSDDVDriftBit;
AliInfo(Form("Configuration sets Production SDD VDrift to %s",fIniSDDVDriftPath.Data()));
}
if (LoadSDDVDrift(fIniSDDVDriftPath, fIniVDriftSDD) ) {stopped = kTRUE; break;}
recTitle = fgkRecKeys[ kPreVDriftSDDFile ];
if ( (recArr = GetConfigRecord(pfc,recTitle,recOpt,1)) && !recOpt.IsNull()) {
for (int i=2;i<=recArr->GetLast();i++) {recOpt += " "; recOpt += recArr->At(i)->GetName();}
fPreSDDVDriftPath = recOpt;
gSystem->ExpandPathName(fPreSDDVDriftPath);
AliInfo(Form("Configuration sets PreCalibration SDD VDrift to %s",fPreSDDVDriftPath.Data()));
if (LoadSDDVDrift(fPreSDDVDriftPath, fPreVDriftSDD) ) {stopped = kTRUE; break;}
}
recTitle = fgkRecKeys[ kGlobalDeltas ];
if ( GetConfigRecord(pfc,recTitle,recOpt,1) ) SetUseGlobalDelta(kTRUE);
recTitle = fgkRecKeys[ kUseDiamond ];
if ( GetConfigRecord(pfc,recTitle,recOpt,1) ) {
if (!GetUseGlobalDelta()) {
AliError("Diamond constraint is supported only for Global Frame mode");
stopped = kTRUE;
break;
}
fUseDiamond = kTRUE;
if (!recOpt.IsNull()) {
fDiamondPath = recOpt;
gSystem->ExpandPathName(fDiamondPath);
fUserProvided |= kSameDiamondBit;
AliInfo(Form("Configuration sets Diamond constraint to %s",fDiamondPath.Data()));
}
}
recTitle = fgkRecKeys[ kUseVertex ];
if ( GetConfigRecord(pfc,recTitle,recOpt,1) ) {
if (!GetUseGlobalDelta()) {
AliError("Vertex constraint is supported only for Global Frame mode");
stopped = kTRUE;
break;
}
fUseVertex = kTRUE;
if (fUseDiamond) {
AliError("Cannot use Vertex and Diamond constraints at the same time");
stopped = kTRUE;
break;
}
AliInfo("Will use Vertex constraint when available");
}
recTitle = fgkRecKeys[ kConstrLocal ];
while( (recArr=GetConfigRecord(pfc,recTitle,recOpt,0)) ) {
nrecElems = recArr->GetLast()+1;
if (recOpt.IsFloat()) {stopped = kTRUE; break;}
if (GetConstraint(recOpt.Data())) {
AliError(Form("Existing constraint %s repeated",recOpt.Data()));
stopped = kTRUE; break;
}
recExt = recArr->At(2)->GetName();
if (!recExt.IsFloat()) {stopped = kTRUE; break;}
double val = recExt.Atof();
recExt = recArr->At(3)->GetName();
if (!recExt.IsFloat()) {stopped = kTRUE; break;}
double err = recExt.Atof();
int nwgh = nrecElems - 4;
double *wgh = new double[nwgh];
for (nwgh=0,irec=4;irec<nrecElems;irec++) {
recExt = recArr->At(irec)->GetName();
if (!recExt.IsFloat()) {stopped = kTRUE; break;}
wgh[nwgh++] = recExt.Atof();
}
if (stopped) {delete[] wgh; break;}
ConstrainLocal(recOpt.Data(),wgh,nwgh,val,err);
delete[] wgh;
}
if (stopped) break;
rewind(pfc);
for (int j=0; j<fNSuperModules; j++) {
AliITSAlignMille2Module* proto = GetSuperModule(j);
if (!proto->IsAlignable()) continue;
AliITSAlignMille2Module* mod = new AliITSAlignMille2Module(*proto);
TGeoHMatrix* mup = AliGeomManager::GetMatrix(mod->GetName());
if (mup) *(mod->GetMatrix()) = *mup;
fMilleModule.AddAtAndExpand(mod,fNModules);
mod->SetGeomParamsGlobal(fUseGlobalDelta);
mod->SetUniqueID(fNModules++);
mod->SetNotInConf(kTRUE);
}
CreateVertexModule();
while( (recArr=GetConfigRecord(pfc,recTitle="",recOpt,0)) ) {
if (!(recTitle==fgkRecKeys[ kModVolID ] || recTitle==fgkRecKeys[ kModIndex ])) continue;
nrecElems = recArr->GetLast()+1;
if (nrecElems<2 || !recOpt.IsDigit()) {stopped = kTRUE; break;}
int idx = recOpt.Atoi();
UShort_t voluid = (idx<=kMaxITSSensID) ? GetModuleVolumeID(idx) : idx;
AliITSAlignMille2Module* mod = 0;
if (voluid>=kMinITSSupeModuleID) {
mod = GetMilleModuleByVID(voluid);
if (!mod) {
for (int j=0; j<fNSuperModules; j++) {
if (voluid==GetSuperModule(j)->GetVolumeID()) {
mod = new AliITSAlignMille2Module(*GetSuperModule(j));
TGeoHMatrix* mup = AliGeomManager::GetMatrix(mod->GetName());
if (mup) *(mod->GetMatrix()) = *mup;
fMilleModule.AddAtAndExpand(mod,fNModules);
mod->SetGeomParamsGlobal(fUseGlobalDelta);
mod->SetUniqueID(fNModules++);
break;
}
}
}
mod->SetNotInConf(kFALSE);
}
else if (idx<=kMaxITSSensVID) {
mod = new AliITSAlignMille2Module(voluid);
fMilleModule.AddAtAndExpand(mod,fNModules);
mod->SetGeomParamsGlobal(fUseGlobalDelta);
mod->SetUniqueID(fNModules++);
}
if (!mod) {stopped = kTRUE; break;}
for (int i=0;i<AliITSAlignMille2Module::kMaxParGeom;i++) {
irec = i+2;
if (irec >= nrecElems) break;
recExt = recArr->At(irec)->GetName();
if (!recExt.IsFloat()) {stopped = kTRUE; break;}
mod->SetFreeDOF(i, recExt.Atof() );
}
if (stopped) break;
for (int i=0;i<3;i++) mod->SetSigmaFactor(i, fSigmaFactor[i]);
for (int i=0;i<3;i++) {
irec = i+8;
if (irec >= nrecElems) break;
recExt = recArr->At(irec)->GetName();
if (!recExt.IsFloat()) {stopped = kTRUE; break;}
mod->SetSigmaFactor(i, recExt.Atof() );
}
if (stopped) break;
if (mod->IsSDD()) {
double vl = 0;
if (nrecElems>11) {
recExt = recArr->At(11)->GetName();
if (recExt.IsFloat()) vl = recExt.Atof();
else {stopped = kTRUE; break;}
irec = 11;
}
mod->SetFreeDOF(AliITSAlignMille2Module::kDOFT0,vl);
Bool_t cstLR = kFALSE;
for (int lr=0;lr<2;lr++) {
vl = 0;
if (nrecElems>12+lr) {
recExt = recArr->At(12+lr)->GetName();
if (recExt.IsFloat()) vl = recExt.Atof();
else {stopped = kTRUE; break;}
irec = 12+lr;
}
mod->SetFreeDOF(lr==0 ? AliITSAlignMille2Module::kDOFDVL : AliITSAlignMille2Module::kDOFDVR,vl);
if (lr==1 && vl>=10) cstLR = kTRUE;
}
if (cstLR) mod->SetVDriftLRSame();
}
mod->EvaluateDOF();
for (++irec;irec<nrecElems;irec++) {
recExt = recArr->At(irec)->GetName();
if (recExt.IsFloat()) {stopped=kTRUE;break;}
AliITSAlignMille2ConstrArray* cstr = (AliITSAlignMille2ConstrArray*)GetConstraint(recExt.Data());
if (!cstr) {
AliInfo(Form("No Local constraint %s was declared",recExt.Data()));
stopped=kTRUE;
break;
}
cstr->AddModule(mod);
}
if (stopped) break;
}
if (stopped) break;
if (fNModules==0) {AliError("Failed to find any MODULE"); stopped = kTRUE; break;}
BuildHierarchy();
rewind(pfc);
while ( (recArr=GetConfigRecord(pfc,recTitle="",recOpt,0))!=0 ) {
nrecElems = recArr->GetLast()+1;
if (recTitle == fgkRecKeys[ kPseudoParents ]) SetAllowPseudoParents(kTRUE);
else if (recTitle == fgkRecKeys[ kTrackFitMethod ]) {
if (recOpt.IsNull() || !recOpt.IsDigit() ) {stopped = kTRUE; break;}
SetInitTrackParamsMeth(recOpt.Atoi());
}
else if (recTitle == fgkRecKeys[ kMinPntTrack ]) {
if (recOpt.IsNull() || !recOpt.IsDigit() ) {stopped = kTRUE; break;}
fMinNPtsPerTrack = recOpt.Atoi();
}
else if (recTitle == fgkRecKeys[ kNStDev ]) {
if (recOpt.IsNull() || !recOpt.IsFloat() ) {stopped = kTRUE; break;}
fNStdDev = (Int_t)recOpt.Atof();
}
else if (recTitle == fgkRecKeys[ kResCutInit ]) {
if (recOpt.IsNull() || !recOpt.IsFloat() ) {stopped = kTRUE; break;}
fResCutInitial = recOpt.Atof();
}
else if (recTitle == fgkRecKeys[ kResCutOther ]) {
if (recOpt.IsNull() || !recOpt.IsFloat() ) {stopped = kTRUE; break;}
fResCut = recOpt.Atof();
}
else if (recTitle == fgkRecKeys[ kLocalSigFactor ]) {
for (irec=0;irec<3;irec++) if (nrecElems>irec+1) {
fSigmaFactor[irec] = ((TObjString*)recArr->At(irec+1))->GetString().Atof();
if (fSigmaFactor[irec]<=0.) stopped = kTRUE;
}
if (stopped) break;
}
else if (recTitle == fgkRecKeys[ kStartFactor ]) {
if (recOpt.IsNull() || !recOpt.IsFloat() ) {stopped = kTRUE; break;}
fStartFac = recOpt.Atof();
}
else if (recTitle == fgkRecKeys[ kFinalFactor ]) {
if (recOpt.IsNull() || !recOpt.IsFloat() ) {stopped = kTRUE; break;}
fFinalFac = recOpt.Atof();
}
else if (recTitle == fgkRecKeys[ kExtraClustersMode ]) {
if (recOpt.IsNull() || !recOpt.IsDigit() ) {stopped = kTRUE; break;}
fExtraClustersMode = recOpt.Atoi();
}
else if (recTitle == fgkRecKeys[ kBField ]) {
if (recOpt.IsNull() || !recOpt.IsFloat() ) {stopped = kTRUE; break;}
SetBField( recOpt.Atof() );
}
else if (recTitle == fgkRecKeys[ kSDDVDCorrMult ]) {
SetSDDVDCorrMult( recOpt.IsNull() || (recOpt.IsFloat() && (recOpt.Atof())>-0.5) );
}
else if (recTitle == fgkRecKeys[ kWeightPt ]) {
double wgh = 1;
if (!recOpt.IsNull()) {
if (!recOpt.IsFloat()) {stopped = kTRUE; break;}
else wgh = recOpt.Atof();
}
SetWeightPt(wgh);
}
else if (recTitle == fgkRecKeys[ kSparseMatrix ]) {
AliMillePede2::SetGlobalMatSparse(kTRUE);
if (recOpt.IsNull()) continue;
if (recOpt == "MINRES") AliMillePede2::SetIterSolverType( AliMinResSolve::kSolMinRes );
else if (recOpt == "FGMRES") AliMillePede2::SetIterSolverType( AliMinResSolve::kSolFGMRes );
else {stopped = kTRUE; break;}
if (nrecElems>=3) {
recExt = recArr->At(2)->GetName();
if (!recExt.IsDigit()) {stopped = kTRUE; break;}
AliMillePede2::SetMinResPrecondType( recExt.Atoi() );
}
if (nrecElems>=4) {
recExt = recArr->At(3)->GetName();
if (!recExt.IsFloat()) {stopped = kTRUE; break;}
AliMillePede2::SetMinResTol( recExt.Atof() );
}
if (nrecElems>=5) {
recExt = recArr->At(4)->GetName();
if (!recExt.IsDigit()) {stopped = kTRUE; break;}
AliMillePede2::SetMinResMaxIter( recExt.Atoi() );
}
}
else if (recTitle == fgkRecKeys[ kRequirePoint ]) {
if (nrecElems>=5) {
recOpt.ToUpper();
int lr = ((TObjString*)recArr->At(2))->GetString().Atoi() - 1;
int hb = ((TObjString*)recArr->At(3))->GetString().Atoi();
int np = ((TObjString*)recArr->At(4))->GetString().Atoi();
int rtp = -1;
if (nrecElems>5) {
TString tpstr = ((TObjString*)recArr->At(5))->GetString();
if ( tpstr.Contains("cosmics",TString::kIgnoreCase) ) rtp = kCosmics;
else if ( tpstr.Contains("collision",TString::kIgnoreCase) ) rtp = kCollision;
else {stopped = kTRUE; break;}
}
int tpmn= rtp<0 ? 0 : rtp;
int tpmx= rtp<0 ? kNDataType-1 : rtp;
for (int itp=tpmn;itp<=tpmx;itp++) {
fRequirePoints[itp]=kTRUE;
if (recOpt == "LAYER") {
if (lr<0 || lr>5) {stopped = kTRUE; break;}
if (hb>0) fNReqLayUp[itp][lr]=np;
else if (hb<0) fNReqLayDown[itp][lr]=np;
else fNReqLay[itp][lr]=np;
}
else if (recOpt == "DETECTOR") {
if (lr<0 || lr>2) {stopped = kTRUE; break;}
if (hb>0) fNReqDetUp[itp][lr]=np;
else if (hb<0) fNReqDetDown[itp][lr]=np;
else fNReqDet[itp][lr]=np;
}
else {stopped = kTRUE; break;}
}
if (stopped) break;
}
else {stopped = kTRUE; break;}
}
else if (recTitle == fgkRecKeys[ kConstrOrphans ]) {
if (nrecElems<4) {stopped = kTRUE; break;}
recExt = recArr->At(2)->GetName();
if (!recExt.IsFloat()) {stopped = kTRUE; break;}
double val = recExt.Atof();
UInt_t pattern = 0;
for (irec=3;irec<nrecElems;irec++) {
recExt = recArr->At(irec)->GetName();
if (!recExt.IsDigit()) {stopped = kTRUE; break;}
pattern |= 0x1 << recExt.Atoi();
}
if (stopped) break;
if (recOpt == "MEAN") ConstrainOrphansMean(val,pattern);
else if (recOpt == "MEDIAN") ConstrainOrphansMedian(val,pattern);
else {stopped = kTRUE; break;}
}
else if (recTitle == fgkRecKeys[ kConstrSubunits ]) {
if (nrecElems<5) {stopped = kTRUE; break;}
recExt = recArr->At(2)->GetName();
if (!recExt.IsFloat()) {stopped = kTRUE; break;}
double val = recExt.Atof();
UInt_t pattern = 0;
for (irec=3;irec<nrecElems;irec++) {
recExt = recArr->At(irec)->GetName();
if (!recExt.IsDigit()) {stopped = kTRUE; break;}
int parid = recExt.Atoi();
if (parid<kMaxITSSensID) pattern |= 0x1 << recExt.Atoi();
else break;
}
if (stopped) break;
Bool_t meanC;
if (recOpt == "MEAN") meanC = kTRUE;
else if (recOpt == "MEDIAN") meanC = kFALSE;
else {stopped = kTRUE; break;}
int curID = -1;
int rangeStart = -1;
for (;irec<nrecElems;irec++) {
recExt = recArr->At(irec)->GetName();
if (recExt == "-") {rangeStart = curID; continue;}
else if (!recExt.IsDigit()) {stopped = kTRUE; break;}
else curID = recExt.Atoi();
if (curID<=kMaxITSSensID) curID = GetModuleVolumeID(curID);
int start;
if (rangeStart>=0) {start = rangeStart+1; rangeStart=-1;}
else start = curID;
for (int id=start;id<=curID;id++) {
int id0 = IsVIDDefined(id);
if (id0<0) {AliDebug(3,Form("Undefined module %d requested in the SubUnits constraint, skipping",id)); continue;}
if (meanC) ConstrainModuleSubUnitsMean(id0,val,pattern);
else ConstrainModuleSubUnitsMedian(id0,val,pattern);
}
}
if (rangeStart>=0) stopped = kTRUE;
if (stopped) break;
}
else if (recTitle == fgkRecKeys[ kApplyConstr ]) {
if (nrecElems<3) {stopped = kTRUE; break;}
int nmID0=-1,nmID1=-1;
for (irec=1;irec<nrecElems;irec++) {
recExt = recArr->At(irec)->GetName();
if (recExt.IsFloat()) break;
if (!GetConstraint(recExt.Data())) {
AliInfo(Form("No Local constraint %s was declared",recExt.Data()));
stopped=kTRUE;
break;
}
if (nmID0<0) nmID0 = irec;
nmID1 = irec;
}
if (stopped) break;
if (irec>=nrecElems) {stopped = kTRUE; break;}
int curID = -1;
int rangeStart = -1;
for (;irec<nrecElems;irec++) {
recExt = recArr->At(irec)->GetName();
if (recExt == "-") {rangeStart = curID; continue;}
else if (!recExt.IsDigit()) {stopped = kTRUE; break;}
else curID = recExt.Atoi();
if (curID<=kMaxITSSensID) curID = GetModuleVolumeID(curID);
int start;
if (rangeStart>=0) {start = rangeStart+1; rangeStart=-1;}
else start = curID;
for (int id=start;id<=curID;id++) {
AliITSAlignMille2Module *md = GetMilleModuleByVID(id);
if (!md) {AliDebug(3,Form("Undefined module %d requested in the Local constraint, skipping",id)); continue;}
for (int nmid=nmID0;nmid<=nmID1;nmid++)
((AliITSAlignMille2ConstrArray*)GetConstraint(recArr->At(nmid)->GetName()))->AddModule(md);
}
}
if (rangeStart>=0) stopped = kTRUE;
if (stopped) break;
}
else if (recTitle == fgkRecKeys[ kSameSDDT0 ]) {
if (nrecElems<3) {stopped = kTRUE; break;}
int curID = -1;
int rangeStart = -1;
AliITSAlignMille2ConstrArray *cstrT0 = new AliITSAlignMille2ConstrArray("SDDT0",0,0,0,0);
int naddM = 0;
cstrT0->SetPattern(BIT(AliITSAlignMille2Module::kDOFT0));
for (irec=1;irec<nrecElems;irec++) {
recExt = recArr->At(irec)->GetName();
if (recExt == "-") {rangeStart = curID; continue;}
else if (!recExt.IsDigit()) {stopped = kTRUE; break;}
else curID = recExt.Atoi();
if (curID<kSDDoffsID || curID>=kSDDoffsID+kNSDDmod) {stopped = kTRUE; break;}
int start;
if (rangeStart>=0) {start = rangeStart+1; rangeStart=-1;}
else start = curID;
for (int id=start;id<=curID;id++) {
int vid = AliITSAlignMille2Module::GetVolumeIDFromIndex(id);
if (vid<=1) {AliDebug(3,Form("Undefined module index %d requested in the SAME_SDDT0 constraint, skipping",id)); continue;}
AliITSAlignMille2Module *md = GetMilleModuleByVID(vid);
if (!md) {AliDebug(3,Form("Undefined module %d requested in the Local constraint, skipping",id)); continue;}
cstrT0->AddModule(md,kFALSE);
naddM++;
}
}
if (rangeStart>=0) stopped = kTRUE;
if (stopped) break;
if (naddM<2) delete cstrT0;
else {
cstrT0->SetConstraintID(GetNConstraints());
fConstraints.Add(cstrT0);
}
}
else if (recTitle == fgkRecKeys[ kUseLocalYErr ]) {
fUseLocalYErr = kTRUE;
}
else if (recTitle == fgkRecKeys[ kMinPointsSens ]) {
if (recOpt.IsNull() || !recOpt.IsDigit() ) {stopped = kTRUE; break;}
SetMinPointsPerSensor( recOpt.Atoi() );
}
else if (recTitle == fgkRecKeys[ kOCDBSpecificPath ]) {
if (recOpt.IsNull() || nrecElems<3 ) {stopped = kTRUE; break;}
AliCDBManager::Instance()->SetSpecificStorage(recOpt.Data(), gSystem->ExpandPathName(recArr->At(2)->GetName()));
AliInfo(Form("Configuration sets OCDB specific storage %s to %s",recOpt.Data(),recArr->At(2)->GetName()));
TObjString *pths = (TObjString*)AliCDBManager::Instance()->GetStorageMap()->GetValue(recOpt.Data());
if (!pths) { stopped = kTRUE; break; }
pths->SetUniqueID(1);
}
else if (recTitle == fgkRecKeys[ kCorrectDiamond ] && fUseDiamond) {
if (nrecElems<4) {stopped = kTRUE; break;}
for (int i=0;i<3;i++) fCorrDiamond[i] = ((TObjString*)recArr->At(i+1))->GetString().Atof();
AliInfo(Form("Correction %+.4f %+.4f %+.4f will be applied to diamond",fCorrDiamond[0],fCorrDiamond[1],fCorrDiamond[2]));
}
else continue;
}
break;
}
fclose(pfc);
if (!fDiamondPath.IsNull() && IsDiamondUsed() && LoadDiamond(fDiamondPath) ) stopped = kTRUE;
if (stopped) {
AliError(Form("Failed on record %s %s ...\n",recTitle.Data(),recOpt.Data()));
return -1;
}
if (CacheMatricesCurr()) return -1;
SetUseLocalYErrors(fUseLocalYErr);
fSegmentationSDD = new AliITSsegmentationSDD();
fIsConfigured = kTRUE;
return 0;
}
void AliITSAlignMille2::BuildHierarchy()
{
if (!GetUseGlobalDelta() && PseudoParentsAllowed()) {
AliInfo("PseudoParents mode is allowed only when the deltas are global\n"
"Since Deltas are local, switching to NoPseudoParents");
SetAllowPseudoParents(kFALSE);
}
AliInfo("Setting parent/child relationships\n");
for (int ipar=0;ipar<fNModules;ipar++) {
AliITSAlignMille2Module* parent = GetMilleModule(ipar);
if (parent->IsSensor()) continue;
for (int icld=0;icld<fNModules;icld++) {
if (icld==ipar) continue;
AliITSAlignMille2Module* child = GetMilleModule(icld);
if (!child->BelongsTo(parent)) continue;
if (child->GetNSensitiveVolumes() > parent->GetNSensitiveVolumes()) continue;
AliITSAlignMille2Module* parOld = child->GetParent();
if (parOld && parOld->GetNSensitiveVolumes()<parent->GetNSensitiveVolumes()) continue;
child->SetParent(parent);
}
}
for (int icld=0;icld<fNModules;icld++) {
AliITSAlignMille2Module* child = GetMilleModule(icld);
AliITSAlignMille2Module* parent = child->GetParent();
if (parent) parent->AddChild(child);
}
for (int icld=0;icld<fNModules;icld++) {
AliITSAlignMille2Module* child = GetMilleModule(icld);
AliITSAlignMille2Module* parent;
while ( (parent=child->GetParent()) && (parent->GetUniqueID()>child->GetUniqueID()) ) {
fMilleModule[icld] = parent;
fMilleModule[parent->GetUniqueID()] = child;
child->SetUniqueID(parent->GetUniqueID());
parent->SetUniqueID(icld);
child = parent;
}
}
for (int icld=fNModules;icld--;) {
AliITSAlignMille2Module* child = GetMilleModule(icld);
AliITSAlignMille2Module* parent = child->GetParent();
if (!parent) continue;
if (!parent->AreSensorsProvided()) {
parent->DelSensitiveVolumes();
parent->SetSensorsProvided(kTRUE);
}
for (int isc=child->GetNSensitiveVolumes();isc--;) {
UShort_t senVID = child->GetSensVolVolumeID(isc);
if (!parent->IsIn(senVID)) parent->AddSensitiveVolume(senVID);
}
}
}
void AliITSAlignMille2::SetCurrentModule(Int_t id)
{
if (fMilleVersion>=2) {
fCurrentModule = GetMilleModule(id);
return;
}
if (fMilleVersion<=1) {
Int_t index=id;
if (index<0 || index>2197) {
AliInfo("index does not correspond to a sensitive volume!");
return;
}
UShort_t voluid=AliITSAlignMille2Module::GetVolumeIDFromIndex(index);
Int_t k=IsContained(voluid);
if (k>=0){
fCurrentSensID = index;
fCluster.SetVolumeID(voluid);
fCluster.SetXYZ(0,0,0);
InitModuleParams();
}
else
AliInfo(Form("module %d not defined\n",index));
}
}
void AliITSAlignMille2::SetRequiredPoint(Char_t* where, Int_t ndet, Int_t updw, Int_t nreqpts,Int_t runtype)
{
ndet--;
int tpmn= runtype<0 ? 0 : runtype;
int tpmx= runtype<0 ? kNDataType-1 : runtype;
for (int itp=tpmn;itp<=tpmx;itp++) {
fRequirePoints[itp]=kTRUE;
if (strstr(where,"LAYER")) {
if (ndet<0 || ndet>5) return;
if (updw>0) fNReqLayUp[itp][ndet]=nreqpts;
else if (updw<0) fNReqLayDown[itp][ndet]=nreqpts;
else fNReqLay[itp][ndet]=nreqpts;
}
else if (strstr(where,"DETECTOR")) {
if (ndet<0 || ndet>2) return;
if (updw>0) fNReqDetUp[itp][ndet]=nreqpts;
else if (updw<0) fNReqDetDown[itp][ndet]=nreqpts;
else fNReqDet[itp][ndet]=nreqpts;
}
}
}
Int_t AliITSAlignMille2::GetModuleIndex(const Char_t *symname)
{
if (!symname) return -1;
for (Int_t i=0;i<=kMaxITSSensID; i++) {
if (!strcmp(symname,AliITSgeomTGeo::GetSymName(i))) return i;
}
return -1;
}
Int_t AliITSAlignMille2::GetModuleIndex(UShort_t voluid)
{
AliGeomManager::ELayerID lay = AliGeomManager::VolUIDToLayer(voluid);
if (lay<1|| lay>6) return -1;
Int_t idx=Int_t(voluid)-2048*lay;
if (idx>=AliGeomManager::LayerSize(lay)) return -1;
for (Int_t ilay=1; ilay<lay; ilay++)
idx += AliGeomManager::LayerSize(ilay);
return idx;
}
UShort_t AliITSAlignMille2::GetModuleVolumeID(const Char_t *symname)
{
if (!symname) return 0;
for (UShort_t voluid=2000; voluid<13300; voluid++) {
Int_t modId;
AliGeomManager::ELayerID layerId = AliGeomManager::VolUIDToLayer(voluid,modId);
if (layerId>0 && layerId<7 && modId>=0 && modId<AliGeomManager::LayerSize(layerId)) {
if (!strcmp(symname,AliGeomManager::SymName(layerId,modId))) return voluid;
}
}
return 0;
}
UShort_t AliITSAlignMille2::GetModuleVolumeID(Int_t index)
{
if (index<0) return 0;
if (index<2198)
return GetModuleVolumeID(AliITSgeomTGeo::GetSymName(index));
else {
for (int i=0; i<fNSuperModules; i++) {
if (GetSuperModule(i)->GetIndex()==index) return GetSuperModule(i)->GetVolumeID();
}
}
return 0;
}
Int_t AliITSAlignMille2::LoadGeometry(TString& path)
{
AliInfo(Form("Loading ideal geometry %s",path.Data()));
if (path.IsNull()) {
AliError("Path to geometry is not provided");
return -1;
}
AliCDBEntry *entry = 0;
TGeoManager *gm = 0;
while(1) {
if (path.BeginsWith("path: ")) {
entry = GetCDBEntry(path.Data());
if (!entry) break;
gm = (TGeoManager*) entry->GetObject();
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
break;
}
if (gSystem->AccessPathName(path.Data())) break;
TFile* precf = TFile::Open(path.Data());
if (precf->FindKey("ALICE")) gm = (TGeoManager*)precf->Get("ALICE");
else if (precf->FindKey("AliCDBEntry") && (entry=(AliCDBEntry*)precf->Get("AliCDBEntry"))) {
gm = (TGeoManager*) entry->GetObject();
if (gm && gm->InheritsFrom(TGeoManager::Class())) entry->SetObject(NULL);
else gm = 0;
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
delete entry;
}
precf->Close();
delete precf;
break;
}
if (!gm) {AliError(Form("Failed to load geometry from %s",path.Data())); return -1;}
AliGeomManager::SetGeometry(gm);
fGeoManager = AliGeomManager::GetGeometry();
if (!fGeoManager) {
AliInfo("Couldn't initialize geometry");
return -1;
}
return 0;
}
Int_t AliITSAlignMille2::SetConstraintWrtRef(const char* reffname)
{
AliInfo(Form("Loading reference deltas for local constraints from %s",reffname));
if (!fGeoManager) return -1;
fConstrRefPath = reffname;
if (fConstrRefPath == "IDEAL") {
fConstrRef = new TClonesArray("AliAlignObjParams",1);
return 0;
}
if (LoadDeltas(fConstrRefPath,fConstrRef)) return -1;
if (fUsePreAlignment) {
AliError("The call of SetConstraintWrtRef must be done before application of the prealignment");
return -1;
}
AliInfo("Converting global reference deltas to local ones");
Int_t nprea = fConstrRef->GetEntriesFast();
for (int ix=0; ix<nprea; ix++) {
AliAlignObjParams *preo=(AliAlignObjParams*) fConstrRef->At(ix);
if (!preo->ApplyToGeometry()) return -1;
}
for (int i=fConstrRef->GetEntriesFast();i--;) {
AliAlignObjParams *preo = (AliAlignObjParams*)fConstrRef->At(i);
TGeoHMatrix * mupd = AliGeomManager::GetMatrix(preo->GetSymName());
if (!mupd) {
for (int im=fNSuperModules;im--;) {
AliITSAlignMille2Module* mod = GetSuperModule(im);
if ( strcmp(mod->GetName(), preo->GetSymName()) ) continue;
mupd = mod->GetMatrix();
break;
}
if (!mupd) {
AliError(Form("Failed to find the volume for reference %s",preo->GetSymName()));
return -1;
}
}
TGeoHMatrix preMat;
preo->GetMatrix(preMat);
TGeoHMatrix tmpMat = *mupd;
preMat.MultiplyLeft( &tmpMat.Inverse() );
tmpMat.MultiplyLeft( &preMat );
preo->SetMatrix(tmpMat);
}
delete fGeoManager;
AliInfo("Reloading target ideal geometry");
return LoadGeometry(fGeometryPath);
}
void AliITSAlignMille2::Init()
{
if (fIsMilleInit) {
AliInfo("Millepede has been already initialized!");
return;
}
for (int ic=0;ic<GetNConstraints();ic++) {
for (int ic1=ic+1;ic1<GetNConstraints();ic1++) {
AliITSAlignMille2Constraint *cst0 = GetConstraint(ic);
AliITSAlignMille2Constraint *cst1 = GetConstraint(ic1);
if (cst0->GetModuleID()<cst1->GetModuleID()) {
fConstraints[ic] = cst1;
fConstraints[ic1] = cst0;
}
}
}
if (!GetUseGlobalDelta()) {
AliInfo("ATTENTION: The parameters are defined in the local frame, no check for degeneracy will be done");
for (int imd=fNModules;imd--;) {
AliITSAlignMille2Module* mod = GetMilleModule(imd);
int npar = mod->GetNParTot();
for (int ipar=0;ipar<npar;ipar++) {
if (!mod->IsFreeDOF(ipar)) continue;
mod->SetParOffset(ipar,fNGlobal++);
}
}
}
else {
for (int imd=fNModules;imd--;) {
AliITSAlignMille2Module* mod = GetMilleModule(imd);
if (mod->IsNotInConf()) continue;
int npar = mod->GetNParTot();
for (int ipar=0;ipar<npar;ipar++) {
if (!mod->IsFreeDOF(ipar)) continue;
int nFreeInstances = 0;
AliITSAlignMille2Module* parent = mod;
Bool_t cstMeanMed=kFALSE,cstGauss=kFALSE;
Bool_t addToFit = kFALSE;
while(parent) {
if (parent->IsNotInConf()) {parent = parent->GetParent(); continue;}
if (!parent->IsFreeDOF(ipar)) {parent = parent->GetParent(); continue;}
nFreeInstances++;
if (IsParModConstrained(parent,ipar, cstMeanMed, cstGauss)) nFreeInstances--;
if (cstGauss) addToFit = kTRUE;
parent = parent->GetParent();
}
if (nFreeInstances>1) {
AliError(Form("Parameter#%d of module %s\nhas %d free instances in the "
"unconstrained parents\nSystem is undefined",ipar,mod->GetName(),nFreeInstances));
exit(1);
}
if (!PseudoParentsAllowed()) addToFit = kTRUE;
else if (!IsParModFamilyVaried(mod,ipar)) addToFit = kTRUE;
else if (!IsParFamilyFree(mod,ipar,1)) addToFit = kTRUE;
if (!addToFit) continue;
mod->SetParOffset(ipar,fNGlobal++);
}
}
}
AliInfo(Form("Initializing Millepede with %d gpar, %d lpar and %d stddev ...",fNGlobal, kNLocal, fNStdDev));
fGlobalDerivatives = new Double_t[fNGlobal];
memset(fGlobalDerivatives,0,fNGlobal*sizeof(Double_t));
fMillepede->InitMille(fNGlobal,kNLocal,fNStdDev,fResCut,fResCutInitial);
fMillepede->SetMinPntValid(fMinPntPerSens);
fIsMilleInit = kTRUE;
ResetLocalEquation();
AliInfo("Parameters initialized to zero");
for (Int_t i=0; i<fNModules; i++) {
AliITSAlignMille2Module* mod = GetMilleModule(i);
for (Int_t j=0; j<mod->GetNParTot(); j++) {
if (mod->GetParOffset(j)<0) continue;
FixParameter(mod->GetParOffset(j),mod->GetParConstraint(j));
fMillepede->SetParamGrID(i, mod->GetParOffset(j));
}
}
ResetCovIScale();
if (fStartFac>1) fMillepede->SetIterations(fStartFac);
if (fFinalFac>1) fMillepede->SetChi2CutRef(fFinalFac);
fTrackBuff.Expand(24);
}
void AliITSAlignMille2::AddConstraint(Double_t *par, Double_t value, Double_t sigma)
{
if (!fIsMilleInit) Init();
fMillepede->SetGlobalConstraint(par, value, sigma);
AliInfo("Adding constraint");
}
void AliITSAlignMille2::InitGlobalParameters(Double_t *par)
{
if (!fIsMilleInit) Init();
fMillepede->SetGlobalParameters(par);
AliInfo("Init Global Parameters");
}
void AliITSAlignMille2::FixParameter(Int_t iPar, Double_t value)
{
if (!fIsMilleInit) {
AliInfo("Millepede has not been initialized!");
return;
}
fMillepede->SetParSigma(iPar, value);
if (IsZero(value)) AliInfo(Form("Parameter %i Fixed", iPar));
}
void AliITSAlignMille2::ResetLocalEquation()
{
for(int i=kNLocal;i--;) fLocalDerivatives[i] = 0.0;
memset(fGlobalDerivatives, 0, fNGlobal*sizeof(double) );
}
Int_t AliITSAlignMille2::ApplyToGeometry()
{
Int_t nprea = fPrealignment->GetEntriesFast();
AliInfo(Form("Array of prealignment deltas: %d entries",nprea));
for (int ix=0; ix<nprea; ix++) {
AliAlignObjParams *preo=(AliAlignObjParams*) fPrealignment->At(ix);
Int_t index=AliITSAlignMille2Module::GetIndexFromVolumeID(preo->GetVolUID());
if (index>=0) {
if (index>=fPreAlignQF.GetSize()) fPreAlignQF.Set(index+10);
fPreAlignQF[index] = (int) preo->GetUniqueID()+1;
}
if (!preo->ApplyToGeometry()) {
AliError(Form("Failed on ApplyToGeometry at %s",preo->GetSymName()));
return -1;
}
}
fUsePreAlignment = kTRUE;
return 0;
}
Int_t AliITSAlignMille2::GetPreAlignmentQualityFactor(Int_t index) const
{
if (!fUsePreAlignment || index<0 || index>=fPreAlignQF.GetSize()) return -1;
return fPreAlignQF[index]-1;
}
AliTrackPointArray *AliITSAlignMille2::PrepareTrack(const AliTrackPointArray *atp)
{
const Double_t kRad2L[6] = {5*5,10*10,18*18,30*30,40*40,60*60};
const Float_t kSensSigY2[6] = {200e-4*200e-4/12, 200e-4*200e-4/12,
300e-4*300e-4/12, 300e-4*300e-4/12,
300e-4*300e-4/12, 300e-4*300e-4/12};
fTrack = NULL;
Int_t idx[20] = {0};
Short_t lrID[20] = {0};
Int_t npts=atp->GetNPoints();
if (npts<fMinNPtsPerTrack) return NULL;
TGeoHMatrix hcov;
Int_t ngoodpts=0;
Int_t intidx[20];
for (int j=0; j<npts; j++) {
intidx[j] = GetRequestedModID(atp->GetVolumeID()[j]);
if (intidx[j]<0) continue;
ngoodpts++;
Float_t xx=atp->GetX()[j];
Float_t yy=atp->GetY()[j];
Float_t r=xx*xx + yy*yy;
int lay;
for (lay=0;lay<6;lay++) if (r<kRad2L[lay]) break;
if (lay>5) continue;
lrID[j] = lay;
}
AliDebug(3,Form("Number of points in defined modules: %d out of %d",ngoodpts,npts));
Int_t nextra=0;
if (fExtraClustersMode) {
int iextra1[20],iextra2[20],layovl[20];
for (Int_t ipt=0; ipt<npts; ipt++) {
if (intidx[ipt]<0) continue;
float p1x=atp->GetX()[ipt];
float p1y=atp->GetY()[ipt];
float p1z=atp->GetZ()[ipt];
int lay1=int(AliGeomManager::VolUIDToLayer(atp->GetVolumeID()[ipt]));
float r1 = p1x*p1x + p1y*p1y;
UShort_t volid1=atp->GetVolumeID()[ipt];
for (int ik=ipt+1; ik<npts; ik++) {
if (intidx[ik]<0) continue;
int lay2=int(AliGeomManager::VolUIDToLayer(atp->GetVolumeID()[ik]));
if (lay2 != lay1) continue;
UShort_t volid2=atp->GetVolumeID()[ik];
if (volid1 == volid2) continue;
float p2x=atp->GetX()[ik];
float p2y=atp->GetY()[ik];
float p2z=atp->GetZ()[ik];
float r2 = p2x*p2x + p2y*p2y;
float dr= (p1x-p2x)*(p1x-p2x) + (p1y-p2y)*(p1y-p2y) + (p1z-p2z)*(p1z-p2z);
if (dr<1.0) {
if (r1<r2) {
iextra1[nextra]=ipt;
iextra2[nextra]=ik;
}
else {
iextra1[nextra]=ik;
iextra2[nextra]=ipt;
}
layovl[nextra]=lay1;
nextra++;
}
}
}
if (fExtraClustersMode==1 && nextra) {
for (int ie=0; ie<nextra; ie++) {
if (gRandom->Rndm()<0.5)
intidx[iextra1[ie]]=-1;
else
intidx[iextra2[ie]]=-1;
}
}
if (fExtraClustersMode==2 && nextra) {
for (int ie=0; ie<nextra; ie++) {
if (layovl[ie]==1) intidx[iextra2[ie]]=-1;
else if (layovl[ie]==2) intidx[iextra1[ie]]=-1;
else intidx[iextra1[ie]]=-1;
}
}
if (fExtraClustersMode==10 && nextra==0) {
AliInfo("Track with no extra clusters: rejected!");
return NULL;
}
ngoodpts=0;
for (int i=0; i<npts; i++) {
if (intidx[i]>=0) ngoodpts++;
}
}
if (ngoodpts<fMinNPtsPerTrack) {
AliDebug(2,"Track with not enough points!");
return NULL;
}
AliTrackPoint p;
if (fRequirePoints[fDataType]) {
Int_t nlayup[6],nlaydown[6],nlay[6];
Int_t ndetup[3],ndetdown[3],ndet[3];
for (Int_t j=0; j<6; j++) {nlayup[j]=0; nlaydown[j]=0; nlay[j]=0;}
for (Int_t j=0; j<3; j++) {ndetup[j]=0; ndetdown[j]=0; ndet[j]=0;}
for (int i=0; i<npts; i++) {
if (intidx[i]<0) continue;
Float_t yy=atp->GetY()[i];
int lay = lrID[i];
int det=lay/2;
if (yy>=0.0) {
nlayup[lay]++;
nlay[lay]++;
ndetup[det]++;
ndet[det]++;
}
else {
nlaydown[lay]++;
nlay[lay]++;
ndetdown[det]++;
ndet[det]++;
}
}
Bool_t isok=kTRUE;
for (Int_t j=0; j<6; j++) {
if (nlayup[j]<fNReqLayUp[fDataType][j]) isok=kFALSE;
if (nlaydown[j]<fNReqLayDown[fDataType][j]) isok=kFALSE;
if (nlay[j]<fNReqLay[fDataType][j]) isok=kFALSE;
}
for (Int_t j=0; j<3; j++) {
if (ndetup[j]<fNReqDetUp[fDataType][j]) isok=kFALSE;
if (ndetdown[j]<fNReqDetDown[fDataType][j]) isok=kFALSE;
if (ndet[j]<fNReqDet[fDataType][j]) isok=kFALSE;
}
if (!isok) {
AliDebug(2,Form("Track does not meet all location point requirements!"));
return NULL;
}
}
Int_t addVertex = IsTypeCollision()&&((fUseDiamond&&(fCheckDiamondPoint!=kDiamondIgnore))||(fUseVertex&&fVertexSet)) ? 1 : 0;
fTrack = (AliTrackPointArray*)fTrackBuff[ngoodpts + addVertex ];
if (!fTrack) {
fTrack = new AliTrackPointArray(ngoodpts + addVertex);
fTrackBuff.AddAtAndExpand(fTrack,ngoodpts + addVertex);
}
for (int i=0; i<npts; i++) idx[i]=i;
if (IsTypeCosmics()) TMath::Sort(npts,atp->GetY(),idx);
Int_t npto=0;
if (fClusLoc.GetSize()<3*npts) fClusLoc.Set(3*npts);
if (fClusGlo.GetSize()<3*npts) fClusGlo.Set(3*npts);
if (fClusSigLoc.GetSize()<3*npts) fClusSigLoc.Set(3*npts);
for (int i=0; i<npts; i++) {
if (intidx[idx[i]]<0) continue;
atp->GetPoint(p,idx[i]);
int sid = AliITSAlignMille2Module::GetIndexFromVolumeID(p.GetVolumeID());
AliITSAlignMille2Module *mod = GetMilleModule(intidx[idx[i]]);
TGeoHMatrix *svOrigMatrix = GetSensorOrigMatrixSID(sid);
fMeasLoc = fClusLoc.GetArray() + npto*3;
fMeasGlo = fClusGlo.GetArray() + npto*3;
fSigmaLoc = fClusSigLoc.GetArray() + npto*3;
fMeasGlo[0]=p.GetX();
fMeasGlo[1]=p.GetY();
fMeasGlo[2]=p.GetZ();
AliDebug(3,Form("Global coordinates of measured point : X=%+f Y=%+f Z=%+f \n",fMeasGlo[0],fMeasGlo[1],fMeasGlo[2]));
svOrigMatrix->MasterToLocal(fMeasGlo,fMeasLoc);
AliDebug(3,Form("Local coordinates of measured point : X=%+f Y=%+f Z=%+f \n",fMeasLoc[0],fMeasLoc[1],fMeasLoc[2]));
if (p.GetDriftTime()>0) ProcessSDDPointInfo(&p,sid, npto);
Double_t hcovel[9];
hcovel[0]=double(p.GetCov()[0]);
hcovel[1]=double(p.GetCov()[1]);
hcovel[2]=double(p.GetCov()[2]);
hcovel[3]=double(p.GetCov()[1]);
hcovel[4]=double(p.GetCov()[3]);
hcovel[5]=double(p.GetCov()[4]);
hcovel[6]=double(p.GetCov()[2]);
hcovel[7]=double(p.GetCov()[4]);
hcovel[8]=double(p.GetCov()[5]);
hcov.SetRotation(hcovel);
if (AliLog::GetGlobalDebugLevel()>=2) {
AliInfo("Original Global Cov Matrix");
printf("%+.4e %+.4e %+.4e\n%+.4e %+.4e\n%+.4e\n",hcovel[0],hcovel[1],hcovel[2],hcovel[4],hcovel[5],hcovel[8]);
}
hcov.Multiply(svOrigMatrix);
hcov.MultiplyLeft(&svOrigMatrix->Inverse());
Double_t *hcovscl = hcov.GetRotationMatrix();
if (AliLog::GetGlobalDebugLevel()>=2) {
AliInfo("Original Local Cov Matrix");
printf("%+.4e %+.4e %+.4e\n%+.4e %+.4e\n%+.4e\n",hcovscl[0],hcovscl[1],hcovscl[2],hcovscl[4],hcovscl[5],hcovscl[8]);
}
hcovscl[4] = fUseLocalYErr ? kSensSigY2[lrID[idx[i]]] : 1E-8;
for (int ir=3;ir--;) for (int ic=3;ic--;) {
if (ir==ic) {
if ( IsZero(hcovscl[ir*3+ic],1e-8) ) hcovscl[ir*3+ic] = 1E-8;
else hcovscl[ir*3+ic] *= mod->GetSigmaFactor(ir)*mod->GetSigmaFactor(ic);
fSigmaLoc[ir] = TMath::Sqrt(hcovscl[ir*3+ic]);
}
else hcovscl[ir*3+ic] = 0;
}
if (AliLog::GetGlobalDebugLevel()>=2) {
AliInfo("Modified Local Cov Matrix");
printf("%+.4e %+.4e %+.4e\n%+.4e %+.4e\n%+.4e\n",hcovscl[0],hcovscl[1],hcovscl[2],hcovscl[4],hcovscl[5],hcovscl[8]);
}
if (fBug==1) {
int ssdidx=AliITSAlignMille2Module::GetIndexFromVolumeID(p.GetVolumeID());
if (ssdidx>=500 && ssdidx<1248) {
int ladder=(ssdidx-500)%22;
if (ladder==18) p.SetVolumeID(AliITSAlignMille2Module::GetVolumeIDFromIndex(ssdidx+1));
if (ladder==19) p.SetVolumeID(AliITSAlignMille2Module::GetVolumeIDFromIndex(ssdidx-1));
}
}
TGeoHMatrix *svMatrix = GetSensorCurrMatrixSID(sid);
svMatrix->LocalToMaster(fMeasLoc,fMeasGlo);
hcov.Multiply(&svMatrix->Inverse());
hcov.MultiplyLeft(svMatrix);
for (int ir=3;ir--;) for (int ic=3;ic--;) if (IsZero(hcovscl[ir*3+ic])) hcovscl[ir*3+ic] = 0.;
if (AliLog::GetGlobalDebugLevel()>=2) {
AliInfo("Modified Global Cov Matrix");
printf("%+.4e %+.4e %+.4e\n%+.4e %+.4e\n%+.4e\n",hcovscl[0],hcovscl[1],hcovscl[2],hcovscl[4],hcovscl[5],hcovscl[8]);
}
Float_t pcov[6];
pcov[0]=hcovscl[0];
pcov[1]=hcovscl[1];
pcov[2]=hcovscl[2];
pcov[3]=hcovscl[4];
pcov[4]=hcovscl[5];
pcov[5]=hcovscl[8];
{
enum {kXX=0,kXY=1,kXZ=2,kYX=kXY,kYY=3,kYZ=4,kZX=kXZ,kZY=kYZ,kZZ=5};
if (pcov[kXX]*pcov[kYY]*0.999<pcov[kXY]*pcov[kXY]) pcov[kXY] = 0.999*TMath::Sign((float)TMath::Sqrt(pcov[kXX]*pcov[kYY]),pcov[kXY]);
if (pcov[kXX]*pcov[kZZ]*0.999<pcov[kXZ]*pcov[kXZ]) pcov[kXZ] = 0.999*TMath::Sign((float)TMath::Sqrt(pcov[kXX]*pcov[kZZ]),pcov[kXZ]);
if (pcov[kYY]*pcov[kZZ]*0.999<pcov[kYZ]*pcov[kYZ]) pcov[kYZ] = 0.999*TMath::Sign((float)TMath::Sqrt(pcov[kYY]*pcov[kZZ]),pcov[kYZ]);
}
p.SetXYZ(fMeasGlo[0],fMeasGlo[1],fMeasGlo[2],pcov);
AliDebug(3,Form("New global coordinates of measured point : X=%+f Y=%+f Z=%+f \n",fMeasGlo[0],fMeasGlo[1],fMeasGlo[2]));
fTrack->AddPoint(npto,&p);
AliDebug(2,Form("Adding point[%d] = ( %+f , %+f , %+f ) volid = %d",npto,fTrack->GetX()[npto],
fTrack->GetY()[npto],fTrack->GetZ()[npto],fTrack->GetVolumeID()[npto] ));
npto++;
}
fDiamondPointID = -1;
if (addVertex) {
fTrack->AddPoint(npto,&fDiamond);
fMeasLoc = fClusLoc.GetArray() + npto*3;
fMeasGlo = fClusGlo.GetArray() + npto*3;
fSigmaLoc = fClusSigLoc.GetArray() + npto*3;
fMeasLoc[0] = fMeasGlo[0] = fDiamond.GetX();
fMeasLoc[1] = fMeasGlo[1] = fDiamond.GetY();
fMeasLoc[2] = fMeasGlo[2] = fDiamond.GetZ();
fSigmaLoc[0] = TMath::Sqrt(fDiamond.GetCov()[0]);
fSigmaLoc[1] = TMath::Sqrt(fDiamond.GetCov()[3]);
fSigmaLoc[2] = TMath::Sqrt(fDiamond.GetCov()[5]);
fDiamondPointID = npto++;
}
return fTrack;
}
AliTrackPointArray *AliITSAlignMille2::SortTrack(const AliTrackPointArray *atp)
{
AliTrackPointArray *atps=NULL;
Int_t idx[20];
Int_t npts=atp->GetNPoints();
AliTrackPoint p;
atps=new AliTrackPointArray(npts);
TMath::Sort(npts,atp->GetY(),idx);
for (int i=0; i<npts; i++) {
atp->GetPoint(p,idx[i]);
atps->AddPoint(i,&p);
AliDebug(2,Form("Point[%d] = ( %+f , %+f , %+f ) volid = %d",i,atps->GetX()[i],atps->GetY()[i],atps->GetZ()[i],atps->GetVolumeID()[i] ));
}
return atps;
}
Int_t AliITSAlignMille2::GetCurrentLayer() const
{
if (!fGeoManager) {
AliInfo("ITS geometry not initialized!");
return -1;
}
return (Int_t)AliGeomManager::VolUIDToLayer(fCluster.GetVolumeID());
}
Int_t AliITSAlignMille2::InitModuleParams()
{
if (!fGeoManager) {
AliInfo("ITS geometry not initialized!");
return -1;
}
UShort_t voluid=fCluster.GetVolumeID();
fCurrentSensID = AliITSAlignMille2Module::GetIndexFromVolumeID(voluid);
if (fCurrentSensID==-1) {
fCurrentModule = GetMilleModuleByVID(voluid);
fCurrentSensID = fCurrentModule->GetIndex();
}
else {
Int_t k=fNModules-1;
fCurrentModule = 0;
while (k>=0 && ! (fCurrentModule=GetMilleModule(k))->IsIn(voluid)) k--;
if (k<0) return -3;
}
for (int i=AliITSAlignMille2Module::kMaxParTot;i--;) fModuleInitParam[i] = 0.0;
int clID = fCluster.GetUniqueID()-1;
if (clID<0) {
fMeasGlo = &fExtClusterPar[0];
fMeasLoc = &fExtClusterPar[3];
fSigmaLoc = &fExtClusterPar[6];
fExtClusterPar[0] = fCluster.GetX();
fExtClusterPar[1] = fCluster.GetY();
fExtClusterPar[2] = fCluster.GetZ();
TGeoHMatrix *svMatrix = fCurrentModule->GetSensitiveVolumeMatrix(voluid);
svMatrix->MasterToLocal(fMeasGlo,fMeasLoc);
TGeoHMatrix hcov;
Double_t hcovel[9];
hcovel[0]=double(fCluster.GetCov()[0]);
hcovel[1]=double(fCluster.GetCov()[1]);
hcovel[2]=double(fCluster.GetCov()[2]);
hcovel[3]=double(fCluster.GetCov()[1]);
hcovel[4]=double(fCluster.GetCov()[3]);
hcovel[5]=double(fCluster.GetCov()[4]);
hcovel[6]=double(fCluster.GetCov()[2]);
hcovel[7]=double(fCluster.GetCov()[4]);
hcovel[8]=double(fCluster.GetCov()[5]);
hcov.SetRotation(hcovel);
hcov.Multiply(svMatrix);
hcov.MultiplyLeft(&svMatrix->Inverse());
if (fSigmaLoc[0]<0.0010) fSigmaLoc[0]=0.0010;
if (fSigmaLoc[2]<0.0010) fSigmaLoc[2]=0.0010;
}
else {
int offs = 3*clID;
fMeasGlo = fClusGlo.GetArray() + offs;
fMeasLoc = fClusLoc.GetArray() + offs;
fSigmaLoc = fClusSigLoc.GetArray() + offs;
}
if (fSigmaLoc[0]<0.0010) fSigmaLoc[0]=0.0010;
if (fSigmaLoc[2]<0.0010) fSigmaLoc[2]=0.0010;
if (fCurrentSensID==kVtxSensID || fUseLocalYErr) if (fSigmaLoc[1]<0.0010) fSigmaLoc[1]=0.0010;
AliDebug(2,Form("Local coordinates of measured point : X=%+f Y=%+f Z=%+f \n",fMeasLoc[0] ,fMeasLoc[1] ,fMeasLoc[2] ));
AliDebug(2,Form("Setting StDev from CovMat : fSigmaLocX=%g fSigmaLocY=%g fSigmaLocZ=%g \n",fSigmaLoc[0] ,fSigmaLoc[1] ,fSigmaLoc[2] ));
return 0;
}
void AliITSAlignMille2::Print(Option_t*) const
{
printf("*** AliMillepede for ITS ***\n");
printf(" Number of defined super modules: %d\n",fNModules);
printf(" Obtained parameters refer to %s Deltas\n",fUseGlobalDelta ? "GLOBAL":"LOCAL");
if (fGeoManager)
printf(" geometry loaded from %s\n",fGeometryPath.Data());
else
printf(" geometry not loaded\n");
if (fUsePreAlignment)
printf(" using prealignment from %s \n",fPreDeltaPath.Data());
else
printf(" prealignment not used\n");
if (fBOn)
printf(" B Field set to %+f T - using helices\n",fBField);
else
printf(" B Field OFF - using straight lines \n");
if (fTPAFitter)
printf(" Using AliITSTPArrayFit class for track fitting\n");
else
printf(" Using StraightLine/Riemann fitter for track fitting\n");
printf("Using local Y error due to the sensor thickness: %s\n",(fUseLocalYErr && fTPAFitter) ? "ON":"OFF");
for (int itp=0;itp<kNDataType;itp++) {
if (fRequirePoints[itp]) printf(" Required points in %s tracks:\n",itp==kCosmics? "cosmics" : "collisions");
for (Int_t i=0; i<6; i++) {
if (fNReqLayUp[itp][i]>0) printf(" Layer %d : %d points with Y>0\n",i+1,fNReqLayUp[itp][i]);
if (fNReqLayDown[itp][i]>0) printf(" Layer %d : %d points with Y<0\n",i+1,fNReqLayDown[itp][i]);
if (fNReqLay[itp][i]>0) printf(" Layer %d : %d points \n",i+1,fNReqLay[itp][i]);
}
for (Int_t i=0; i<3; i++) {
if (fNReqDetUp[itp][i]>0) printf(" Detector %d : %d points with Y>0\n",i+1,fNReqDetUp[itp][i]);
if (fNReqDetDown[itp][i]>0) printf(" Detector %d : %d points with Y<0\n",i+1,fNReqDetDown[itp][i]);
if (fNReqDet[itp][i]>0) printf(" Detector %d : %d points \n",i+1,fNReqDet[itp][i]);
}
}
printf(" SDD VDrift correction : %s",fIsSDDVDriftMult ? "Mult":"Add");
printf(" Weight acc. to pT in power : %f",fWeightPt);
printf("\n Millepede configuration parameters:\n");
printf(" init factor for chi2 cut : %.4f\n",fStartFac);
printf(" final factor for chi2 cut : %.4f\n",fFinalFac);
printf(" first iteration cut value : %.4f\n",fResCutInitial);
printf(" other iterations cut value : %.4f\n",fResCut);
printf(" number of stddev for chi2 cut : %d\n",fNStdDev);
printf(" def.scaling for local sigmas : %.4f %.4f %.4f\n",fSigmaFactor[0],fSigmaFactor[1],fSigmaFactor[2]);
printf(" min.tracks per module : %d\n",fMinPntPerSens);
printf("List of defined modules:\n");
printf(" intidx\tindex\tvoluid\tname\n");
for (int i=0; i<fNModules; i++) {
AliITSAlignMille2Module* md = GetMilleModule(i);
printf(" %d\t%d\t%d\t%s\n",i,md->GetIndex(),md->GetVolumeID(),md->GetName());
}
}
AliITSAlignMille2Module *AliITSAlignMille2::GetMilleModuleByVID(UShort_t voluid) const
{
Int_t i=IsVIDDefined(voluid);
if (i<0) return NULL;
return GetMilleModule(i);
}
AliITSAlignMille2Module *AliITSAlignMille2::GetMilleModuleBySymName(const Char_t* symname) const
{
UShort_t vid = AliITSAlignMille2Module::GetVolumeIDFromSymname(symname);
if (vid>0) return GetMilleModuleByVID(vid);
else {
int i = IsSymDefined(symname);
if (i>=0) return GetMilleModule(i);
}
return 0;
}
AliITSAlignMille2Module *AliITSAlignMille2::GetMilleModuleIfContained(const Char_t* symname) const
{
int i = IsSymContained(symname);
return i<0 ? 0 : GetMilleModule(i);
}
AliAlignObjParams* AliITSAlignMille2::GetPrealignedObject(const Char_t* symname) const
{
if (!fPrealignment) return 0;
for (int ipre=fPrealignment->GetEntriesFast();ipre--;) {
AliAlignObjParams* preob = (AliAlignObjParams*)fPrealignment->At(ipre);
if (!strcmp(preob->GetSymName(),symname)) return preob;
}
return 0;
}
AliAlignObjParams* AliITSAlignMille2::GetConstrRefObject(const Char_t* symname) const
{
if (!fConstrRef) return 0;
for (int ipre=fConstrRef->GetEntriesFast();ipre--;) {
AliAlignObjParams* preob = (AliAlignObjParams*)fConstrRef->At(ipre);
if (!strcmp(preob->GetSymName(),symname)) return preob;
}
return 0;
}
Bool_t AliITSAlignMille2::InitRiemanFit()
{
if (!fBOn) return kFALSE;
Int_t npts=0;
AliTrackPoint ap;
npts = fTrack->GetNPoints();
AliDebug(3,Form("Fitting track with %d points",npts));
if (!fRieman) fRieman = new AliTrackFitterRieman();
fRieman->Reset();
fRieman->SetTrackPointArray(fTrack);
TArrayI ai(npts);
for (Int_t ipt=0; ipt<npts; ipt++) ai[ipt]=fTrack->GetVolumeID()[ipt];
if (!fRieman->Fit(&ai,NULL,(AliGeomManager::ELayerID)1,(AliGeomManager::ELayerID)6)) {
return kFALSE;
}
for (int i=0; i<5; i++)
fLocalInitParam[i] = fRieman->GetParam()[i];
return kTRUE;
}
void trackFit2D(Int_t &, Double_t *, double &chi2, double *par, int flag)
{
const double kTiny = 1.e-14;
chi2 = 0;
static AliTrackPoint pnt;
static Bool_t fullErr2D;
if (flag==1) fullErr2D = kFALSE;
enum {kAX,kAZ,kBX,kBZ};
enum {kXX=0,kXY=1,kXZ=2,kYX=kXY,kYY=3,kYZ=4,kZX=kXZ,kZY=kYZ,kZZ=5};
AliITSAlignMille2* alig = AliITSAlignMille2::GetInstance();
AliTrackPointArray* track = alig->GetCurrentTrack();
int npts = track->GetNPoints();
for (int ip=0;ip<npts;ip++) {
track->GetPoint(pnt,ip);
const float *cov = pnt.GetCov();
double y = pnt.GetY();
double dx = pnt.GetX() - (par[kAX]+y*par[kBX]);
double dz = pnt.GetZ() - (par[kAZ]+y*par[kBZ]);
double xxe = cov[kXX];
double zze = cov[kZZ];
double xze = cov[kXZ];
if (fullErr2D) {
xxe += par[kBX]*par[kBX]*cov[kYY]-2.*par[kBX]*cov[kXY];
zze += par[kBZ]*par[kBZ]*cov[kYY]-2.*par[kBZ]*cov[kZY];
xze += par[kBX]*par[kBZ]*cov[kYY]-cov[kYZ]*par[kBZ]-cov[kXY]*par[kBX];
}
double det = xxe*zze - xze*xze;
if (det<kTiny) {
printf("Negative diag. error (det=%+e) |sxx:%+e szz:%+e sxz:%+e| bx:%+e bz:%+e|\n"
"Discarding correlation term\n",det,xxe,zze,xze,par[kBX],par[kBZ]);
xxe = cov[kXX];
zze = cov[kZZ];
xze = cov[kXZ];
fullErr2D = kFALSE;
}
double xxeI = zze/det;
double zzeI = xxe/det;
double xzeI =-xze/det;
chi2 += dx*dx*xxeI + dz*dz*zzeI + 2.*dx*dz*xzeI;
}
}
void AliITSAlignMille2::InitTrackParams(int meth)
{
Int_t npts=0;
AliTrackPoint ap;
double sX=0,sXY=0,sZ=0,sZY=0,sY=0,sYY=0,det=0;
npts = fTrack->GetNPoints();
AliDebug(3,Form("*** initializing track with %d points ***",npts));
for (int i=npts;i--;) {
sY += fTrack->GetY()[i];
sYY += fTrack->GetY()[i]*fTrack->GetY()[i];
sX += fTrack->GetX()[i];
sXY += fTrack->GetX()[i]*fTrack->GetY()[i];
sZ += fTrack->GetZ()[i];
sZY += fTrack->GetZ()[i]*fTrack->GetY()[i];
}
det = sYY*npts-sY*sY;
if (IsZero(det)) det = 1E-16;
fLocalInitParam[0] = (sX*sYY-sY*sXY)/det;
fLocalInitParam[2] = (sXY*npts-sY*sX)/det;
fLocalInitParam[1] = (sZ*sYY-sY*sZY)/det;
fLocalInitParam[3] = (sZY*npts-sY*sZ)/det;
fLocalInitParam[4] = 0.0;
AliDebug(2,Form("X = p0gx + ugx*Y : p0gx = %+f ugx = %+f\n",fLocalInitParam[0],fLocalInitParam[2]));
if (meth==1) return;
static TVirtualFitter *minuit = 0;
static Double_t step[5] = {1E-3,1E-3,1E-4,1E-4,1E-5};
static Double_t arglist[10];
if (!minuit) {
minuit = TVirtualFitter::Fitter(0,4);
minuit->SetFCN(trackFit2D);
arglist[0] = 1;
minuit->ExecuteCommand("SET ERR",arglist, 1);
arglist[0] = -1;
minuit->ExecuteCommand("SET PRINT",arglist,1);
}
minuit->SetParameter(0, "ax", fLocalInitParam[0], step[0], 0,0);
minuit->SetParameter(1, "az", fLocalInitParam[1], step[1], 0,0);
minuit->SetParameter(2, "bx", fLocalInitParam[2], step[2], 0,0);
minuit->SetParameter(3, "bz", fLocalInitParam[3], step[3], 0,0);
arglist[0] = 1000;
arglist[1] = 0.001;
minuit->ExecuteCommand("MIGRAD",arglist,2);
for (int i=0;i<4;i++) fLocalInitParam[i] = minuit->GetParameter(i);
for (int i=0;i<4;i++) for (int j=0;j<4;j++) fLocalInitParEr[i][j] = minuit->GetCovarianceMatrixElement(i,j);
}
Int_t AliITSAlignMille2::IsSymDefined(const Char_t* symname) const
{
for (int k=fNModules;k--;) if (!strcmp(symname,GetMilleModule(k)->GetName())) return k;
return -1;
}
Int_t AliITSAlignMille2::IsSymContained(const Char_t* symname) const
{
UShort_t vid = AliITSAlignMille2Module::GetVolumeIDFromSymname(symname);
if (vid>0) return IsVIDContained(vid);
return IsSymDefined(symname);
}
Int_t AliITSAlignMille2::IsVIDDefined(UShort_t voluid) const
{
for (int k=fNModules;k--;) if (voluid==GetMilleModule(k)->GetVolumeID()) return k;
return -1;
}
Int_t AliITSAlignMille2::IsVIDContained(UShort_t voluid) const
{
if (AliITSAlignMille2Module::GetIndexFromVolumeID(voluid)<0) return -1;
for (int k=fNModules;k--;) if (GetMilleModule(k)->IsIn(voluid)) return k;
return -1;
}
Int_t AliITSAlignMille2::GetRequestedModID(UShort_t voluid) const
{
if (AliITSAlignMille2Module::GetIndexFromVolumeID(voluid)<0) return -1;
int k;
for (k=fNModules;k--;) if (GetMilleModule(k)->IsIn(voluid)) break;
if (k<0) return -1;
AliITSAlignMille2Module* md = GetMilleModule(k);
while (md && md->IsNotInConf()) md = md->GetParent();
if (md) return int(md->GetUniqueID());
else return -1;
}
Int_t AliITSAlignMille2::CheckCurrentTrack()
{
Int_t npts = fTrack->GetNPoints();
Int_t ngoodpts=0;
for (int j=0; j<npts; j++) if (IsVIDContained(fTrack->GetVolumeID()[j])>=0) ngoodpts++;
if (ngoodpts<fMinNPtsPerTrack) return 0;
return ngoodpts;
}
Int_t AliITSAlignMille2::ProcessTrack(const AliTrackPointArray *track, Double_t wgh)
{
if (!fIsMilleInit) Init();
Int_t npts = track->GetNPoints();
AliDebug(2,Form("*** Input track with %d points ***",npts));
fTrackWeight = wgh;
fTrack=PrepareTrack(track);
if (!fTrack) {
RemoveHelixFitConstraint();
RemoveVertexConstraint();
return -1;
}
npts = fTrack->GetNPoints();
if (npts>kMaxPoints) {
AliError(Form("Compiled with kMaxPoints=%d, current track has %d points",kMaxPoints,npts));
}
AliDebug(2,Form("*** Processing prepared track with %d points ***",npts));
npts = FitTrack();
if (npts<0) return npts;
Int_t nloceq=0;
Int_t ngloeq=0;
static Mille2Data md[kMaxPoints];
for (Int_t ipt=0; ipt<npts; ipt++) {
fTrack->GetPoint(fCluster,ipt);
fCluster.SetUniqueID(ipt+1);
AliDebug(2,Form("\n--- processing point %d --- \n",ipt));
if (InitModuleParams()) continue;
AliDebug(2,Form(" VolID=%d Index=%d InternalIdx=%d symname=%s\n",
track->GetVolumeID()[ipt], fCurrentModule->GetIndex(),
fCurrentModule->GetUniqueID(), AliGeomManager::SymName(track->GetVolumeID()[ipt]) ));
AliDebug(2,Form(" Preprocessed Point = ( %+f , %+f , %+f ) \n",fCluster.GetX(),fCluster.GetY(),fCluster.GetZ()));
int res = fTPAFitter ? AddLocalEquationTPA(md[nloceq]) : AddLocalEquation(md[nloceq]);
if (res<0) {fTotBadLocEqPoints++; nloceq = 0; break;}
else if (res==0) nloceq++;
else {nloceq++; ngloeq++;}
}
fTrack=NULL;
if (nloceq<fMinNPtsPerTrack || ngloeq<1) return -1;
SetLocalEquations(md,nloceq);
fMillepede->SaveRecordData();
fCurvFitWasConstrained = kFALSE;
return 0;
}
Int_t AliITSAlignMille2::FitTrack()
{
const Double_t kfDiamondTolerance = 0.1;
if (!fTrack) return -1;
int npts = fTrack->GetNPoints();
if (fTPAFitter) {
fTPAFitter->AttachPoints(fTrack,0, npts-1);
fTPAFitter->SetBz(fBField);
fTPAFitter->SetTypeCosmics(IsTypeCosmics());
if (fIniTrackParamsMeth==1) fTPAFitter->SetIgnoreCov();
double chi2;
double chi2f = 0;
double dca2err;
double dca2 = 0.;
Bool_t fitIsDone = kFALSE;
if (fUseDiamond && fDiamondPointID>0 && fCheckDiamondPoint==kDiamondCheckIfPrompt) {
fTPAFitter->SetFirstLast(0,fDiamondPointID-1);
if (IsCovIScaleTouched()) for (int i=npts;i--;) fTPAFitter->SetCovIScale(i,GetCovIScale(i));
chi2f = fTPAFitter->Fit(fConstrCharge,fConstrPT,fConstrPTErr);
if ( chi2f<0 || (chi2f>fNStdDev*fStartFac && fTPAFitter->GetNIterations()>=fTPAFitter->GetMaxIterations()) ) {
AliInfo(Form("Track fit failed on checking if it is prompt! skipping this track... Chi2:%+e",chi2f));
fTPAFitter->Reset();
return -5;
}
double xyzRes[3];
fTPAFitter->GetResiduals(xyzRes,&fDiamondI,kTRUE);
dca2 = xyzRes[0]*xyzRes[0] + xyzRes[1]*xyzRes[1];
double pT = IsFieldON() ? fTPAFitter->GetPt() : 0.45;
if (pT<0.1) pT = 0.1;
dca2err = kfDiamondTolerance + 0.02/pT;
if (dca2>dca2err*dca2err) {
int* clst = (int*) fTrack->GetClusterType();
clst[fDiamondPointID] = -1;;
fDiamondPointID = -1;
fitIsDone = kTRUE;
npts--;
}
else fTPAFitter->SetFirstLast(0,fDiamondPointID);
}
if (!fitIsDone) {
if (IsCovIScaleTouched()) for (int i=npts;i--;) fTPAFitter->SetCovIScale(i,GetCovIScale(i));
chi2 = fTPAFitter->Fit(fConstrCharge,fConstrPT,fConstrPTErr);
}
RemoveHelixFitConstraint();
RemoveVertexConstraint();
if ( !fitIsDone && (chi2<0 || (chi2>fNStdDev*fStartFac && fTPAFitter->GetNIterations()>=fTPAFitter->GetMaxIterations())) ) {
AliInfo(Form("Track fit failed! skipping this track... Chi2:%+e",chi2));
if (fUseDiamond && fDiamondPointID>0 && fCheckDiamondPoint==kDiamondCheckIfPrompt) AliInfo(Form("VertexFree fit gave Chi2:%+e with residual %+e",chi2f,TMath::Sqrt(dca2)));
fTPAFitter->Reset();
return -5;
}
fNLocal = fTPAFitter->IsFieldON() ? 5:4;
npts = fTPAFitter->GetLast() - fTPAFitter->GetFirst() + 1;
}
else {
if (!fBOn) {
InitTrackParams(fIniTrackParamsMeth);
}
else {
if (!InitRiemanFit()) {
AliInfo("Riemann fit failed! skipping this track...");
fTrack=NULL;
return -5;
}
}
}
return npts;
}
Int_t AliITSAlignMille2::CalcIntersectionPoint(const Double_t *lpar, const Double_t *gpar)
{
AliDebug(3,Form("lpar = %g %g %g %g %g\ngpar= %g %g %g %g %g %g\n",lpar[0],lpar[1],lpar[2],lpar[3],lpar[4],gpar[0],gpar[1],gpar[2],gpar[3],gpar[4],gpar[5]));
AliDebug(3,Form("deltalpar = %g %g %g %g %g\n",lpar[0]-fLocalInitParam[0],lpar[1]-fLocalInitParam[1],lpar[2]-fLocalInitParam[2],lpar[3]-fLocalInitParam[3],lpar[4]-fLocalInitParam[4]));
TGeoHMatrix *tempHMat = fCurrentModule->GetSensitiveVolumeModifiedMatrix(fCluster.GetVolumeID(),gpar,
!fUseGlobalDelta);
if (!tempHMat) return -1;
Double_t v0g[3];
Double_t p0g[3];
if (fBOn) {
AliTrackPoint prf;
for (int ip=0; ip<5; ip++)
fRieman->SetParam(ip,lpar[ip]);
if (!fRieman->GetPCA(fCluster,prf)) {
AliInfo(Form("error in GetPCA for point %d",fCluster.GetVolumeID()));
return -3;
}
Double_t alpha=fRieman->GetAlpha();
Double_t x1g = prf.GetX();
Double_t y1g = prf.GetY();
Double_t z1g = prf.GetZ();
Double_t x1t = x1g*TMath::Cos(alpha) + y1g*TMath::Sin(alpha);
Double_t y1t = -x1g*TMath::Sin(alpha) + y1g*TMath::Cos(alpha);
Double_t z1t = z1g;
Double_t x2t = x1t+1.0;
Double_t y2t = y1t+fRieman->GetDYat(x1t);
Double_t z2t = z1t+fRieman->GetDZat(x1t);
Double_t x2g = x2t*TMath::Cos(alpha) - y2t*TMath::Sin(alpha);
Double_t y2g = x2t*TMath::Sin(alpha) + y2t*TMath::Cos(alpha);
Double_t z2g = z2t;
AliDebug(3,Form("Riemann frame: fAlpha = %+f = %+f ",alpha,alpha*180./TMath::Pi()));
AliDebug(3,Form(" prf_glo=( %+f , %+f , %+f ) prf_rf=( %+f , %+f , %+f )\n", x1g,y1g,z1g, x1t,y1t,z1t));
AliDebug(3,Form(" mov_glo=( %+f , %+f , %+f ) rf=( %+f , %+f , %+f )\n",x2g,y2g,z2g, x2t,y2t,z2t));
if (TMath::Abs(y2g-y1g)<1e-15) {
AliInfo("DeltaY=0! Cannot proceed...");
return -1;
}
v0g[0] = (x2g-x1g)/(y2g-y1g);
v0g[1]=1.0;
v0g[2] = (z2g-z1g)/(y2g-y1g);
p0g[0]=x1g;
p0g[1]=y1g;
p0g[2]=z1g;
}
else {
v0g[0]=lpar[2];
v0g[1]=1.0;
v0g[2]=lpar[3];
p0g[0]=lpar[0];
p0g[1]=0.0;
p0g[2]=lpar[1];
}
AliDebug(3,Form("Line vector: ( %+f , %+f , %+f ) point:( %+f , %+f , %+f )\n",v0g[0],v0g[1],v0g[2],p0g[0],p0g[1],p0g[2]));
Double_t p0l[3],v0l[3];
tempHMat->MasterToLocalVect(v0g,v0l);
tempHMat->MasterToLocal(p0g,p0l);
if (TMath::Abs(v0l[1])<1e-15) {
AliInfo("Track Y direction in local frame is zero! Cannot proceed...");
return -1;
}
fPintLoc[0] = p0l[0] - (v0l[0]/v0l[1])*p0l[1];
fPintLoc[1] = 0;
fPintLoc[2] = p0l[2] - (v0l[2]/v0l[1])*p0l[1];
tempHMat->LocalToMaster(fPintLoc,fPintGlo);
AliDebug(3,Form("Intesect. point: L( %+f , %+f , %+f ) G( %+f , %+f , %+f )\n",fPintLoc[0],fPintLoc[1],fPintLoc[2],fPintGlo[0],fPintGlo[1],fPintGlo[2]));
return 0;
}
Int_t AliITSAlignMille2::CalcDerivatives(Int_t paridx, Bool_t islpar)
{
Double_t lpar[kNLocal];
Double_t gpar[kNParCh];
Double_t *derivative;
for (Int_t i=0; i<kNLocal; i++) lpar[i]=fLocalInitParam[i];
for (Int_t i=0; i<kNParCh; i++) gpar[i]=fModuleInitParam[i];
Double_t dpar = 0.;
if (islpar) {
derivative = fDerivativeLoc[paridx];
if (!fBOn) {
if (paridx<3) dpar=1.0e-4;
else dpar=1.0e-6;
}
else {
Double_t dfrac=0.01;
switch(paridx) {
case 0:
dpar = TMath::Max(1.0e-6,TMath::Abs(fLocalInitParam[paridx]*dfrac));
break;
case 1:
dpar = TMath::Max(0.002,TMath::Abs(fLocalInitParam[paridx]*dfrac));
break;
case 2:
dpar = TMath::Max(0.09,TMath::Abs(fLocalInitParam[paridx]*dfrac));
break;
case 3:
dpar = TMath::Max(0.07,TMath::Abs(fLocalInitParam[paridx]*dfrac));
break;
case 4:
dpar = TMath::Max(0.003,TMath::Abs(fLocalInitParam[paridx]*dfrac));
break;
}
}
}
else {
derivative = fDerivativeGlo[paridx];
if (paridx<3) dpar=1.0e-4;
else dpar=1.0e-2;
}
AliDebug(3,Form("+++ using dpar=%g",dpar));
Double_t pintl1[3];
Double_t pintl2[3];
Double_t pintl3[3];
Double_t pintl4[3];
if (islpar) lpar[paridx] -= dpar;
else gpar[paridx] -= dpar;
if (CalcIntersectionPoint(lpar, gpar)) return -2;
for (Int_t i=0; i<3; i++) pintl1[i]=fPintLoc[i];
if (islpar) lpar[paridx] += dpar/2;
else gpar[paridx] += dpar/2;
if (CalcIntersectionPoint(lpar, gpar)) return -2;
for (Int_t i=0; i<3; i++) pintl2[i]=fPintLoc[i];
if (islpar) lpar[paridx] += dpar;
else gpar[paridx] += dpar;
if (CalcIntersectionPoint(lpar, gpar)) return -2;
for (Int_t i=0; i<3; i++) pintl3[i]=fPintLoc[i];
if (islpar) lpar[paridx] += dpar/2;
else gpar[paridx] += dpar/2;
if (CalcIntersectionPoint(lpar, gpar)) return -2;
for (Int_t i=0; i<3; i++) pintl4[i]=fPintLoc[i];
Double_t h2 = 1./(2.*dpar);
Double_t d0 = pintl4[0]-pintl1[0];
Double_t d2 = 2.*(pintl3[0]-pintl2[0]);
derivative[0] = h2*(4*d2 - d0)/3.;
if (TMath::Abs(derivative[0]) < 1.0e-9) derivative[0] = 0.0;
d0 = pintl4[2]-pintl1[2];
d2 = 2.*(pintl3[2]-pintl2[2]);
derivative[2] = h2*(4*d2 - d0)/3.;
if (TMath::Abs(derivative[2]) < 1.0e-9) derivative[2]=0.0;
AliDebug(3,Form("\n+++ derivatives +++ \n"));
AliDebug(3,Form("+++ dXLoc/dpar = %g +++\n",derivative[0]));
AliDebug(3,Form("+++ dZLoc/dpar = %g +++\n\n",derivative[2]));
return 0;
}
Int_t AliITSAlignMille2::AddLocalEquation(Mille2Data &m)
{
if (CalcIntersectionPoint(fLocalInitParam, fModuleInitParam)) return -1;
for (Int_t i=0; i<3; i++) fPintLoc0[i]=fPintLoc[i];
AliDebug(2,Form("Intersect. point: L( %+f , %+f , %+f )",fPintLoc[0],fPintLoc[1],fPintLoc[2]));
Bool_t zeroX = kTRUE;
Bool_t zeroZ = kTRUE;
for (Int_t i=0; i<fNLocal; i++) {
if (CalcDerivatives(i,kTRUE)) return -1;
m.fDerLoc[i][kX] = fDerivativeLoc[i][0];
m.fDerLoc[i][kZ] = fDerivativeLoc[i][2];
if (zeroX) zeroX = IsZero(fDerivativeLoc[i][0]);
if (zeroZ) zeroZ = IsZero(fDerivativeLoc[i][2]);
}
if (zeroX) {AliInfo("Skipping: zero local X derivatives!"); return -1;}
if (zeroZ) {AliInfo("Skipping: zero local Z derivatives!"); return -1;}
int status = 0;
int ifill = 0;
AliITSAlignMille2Module* endModule = fCurrentModule;
zeroX = zeroZ = kTRUE;
Bool_t dfDone[kNParCh];
for (int i=kNParCh;i--;) dfDone[i] = kFALSE;
m.fNModFilled = 0;
Double_t jacobian[kNParChGeom];
Int_t nmodTested = 0;
do {
if (fCurrentModule->GetNParFree()==0) continue;
nmodTested++;
for (Int_t i=0; i<kNParChGeom; i++) {
if (!fUseGlobalDelta) dfDone[i] = kFALSE;
if (fCurrentModule->GetParOffset(i)<0) continue;
if (!dfDone[i]) {
if (CalcDerivatives(i,kFALSE)) return -1;
else {
dfDone[i] = kTRUE;
if (zeroX) zeroX = IsZero(fDerivativeGlo[i][0]);
if (zeroZ) zeroZ = IsZero(fDerivativeGlo[i][2]);
}
}
m.fDerGlo[ifill][kX] = fDerivativeGlo[i][0];
m.fDerGlo[ifill][kZ] = fDerivativeGlo[i][2];
m.fParMilleID[ifill++] = fCurrentModule->GetParOffset(i);
}
Int_t sddLR = -1;
if ( fCurrentModule->IsSDD() &&
(fCurrentModule->GetParOffset(AliITSAlignMille2Module::kDOFT0)>=0 ||
fCurrentModule->GetParOffset(sddLR = GetVDriftSDD()>0 ?
AliITSAlignMille2Module::kDOFDVL : AliITSAlignMille2Module::kDOFDVR)>=0)
) {
if (!dfDone[AliITSAlignMille2Module::kDOFT0] || !dfDone[sddLR]) {
double dXdxlocsens=0., dZdxlocsens=0.;
if (!fUseGlobalDelta && fCurrentModule->GetVolumeID()==fCluster.GetVolumeID()) {
if (!dfDone[AliITSAlignMille2Module::kDOFTX]) {
CalcDerivatives(AliITSAlignMille2Module::kDOFTX,kFALSE);
dfDone[AliITSAlignMille2Module::kDOFTX] = kTRUE;
}
dXdxlocsens = fDerivativeGlo[AliITSAlignMille2Module::kDOFTX][0];
dZdxlocsens = fDerivativeGlo[AliITSAlignMille2Module::kDOFTX][2];
}
else {
if (fUseGlobalDelta) fCurrentModule->CalcDerivGloLoc(fCluster.GetVolumeID(),
AliITSAlignMille2Module::kDOFTX, jacobian);
else fCurrentModule->CalcDerivCurLoc(fCluster.GetVolumeID(),
AliITSAlignMille2Module::kDOFTX, jacobian);
for (int j=0;j<kNParChGeom;j++) {
if (!dfDone[j]) {CalcDerivatives(j,kFALSE); dfDone[j] = kTRUE;}
dXdxlocsens += fDerivativeGlo[j][0] * jacobian[j];
dZdxlocsens += fDerivativeGlo[j][2] * jacobian[j];
}
}
if (zeroX) zeroX = IsZero(dXdxlocsens);
if (zeroZ) zeroZ = IsZero(dZdxlocsens);
double vdrift = GetVDriftSDD();
double tdrift = GetTDriftSDD();
fDerivativeGlo[AliITSAlignMille2Module::kDOFT0][0] = dXdxlocsens*vdrift;
fDerivativeGlo[AliITSAlignMille2Module::kDOFT0][2] = dZdxlocsens*vdrift;
dfDone[AliITSAlignMille2Module::kDOFT0] = kTRUE;
double mltCorr = fIsSDDVDriftMult ? TMath::Abs(vdrift) : 1;
fDerivativeGlo[sddLR][0] = -dXdxlocsens*mltCorr*TMath::Sign(tdrift,vdrift);
fDerivativeGlo[sddLR][2] = -dZdxlocsens*mltCorr*TMath::Sign(tdrift,vdrift);
dfDone[sddLR] = kTRUE;
}
if (fCurrentModule->GetParOffset(AliITSAlignMille2Module::kDOFT0)>=0) {
m.fDerGlo[ifill][kX] = fDerivativeGlo[AliITSAlignMille2Module::kDOFT0][0];
m.fDerGlo[ifill][kZ] = fDerivativeGlo[AliITSAlignMille2Module::kDOFT0][2];
m.fParMilleID[ifill++] = fCurrentModule->GetParOffset(AliITSAlignMille2Module::kDOFT0);
}
if (fCurrentModule->GetParOffset(sddLR)>=0) {
m.fDerGlo[ifill][kX] = fDerivativeGlo[sddLR][0];
m.fDerGlo[ifill][kZ] = fDerivativeGlo[sddLR][2];
m.fParMilleID[ifill++] = fCurrentModule->GetParOffset(sddLR);
}
}
m.fModuleID[m.fNModFilled++] = fCurrentModule->GetUniqueID();
} while( (fCurrentModule=fCurrentModule->GetParent()) );
if (nmodTested>0 && zeroX) {AliInfo("Skipping: zero global X derivatives!");return -1;}
if (nmodTested>0 && zeroZ) {AliInfo("Skipping: zero global Z derivatives!");return -1;}
AliDebug(2,Form("Adding local equation X with fMeas=%.6f and fSigma=%.6f",(fMeasLoc[0]-fPintLoc0[0]), fSigmaLoc[0]));
m.fMeas[kX] = fMeasLoc[0]-fPintLoc0[0];
m.fSigma[kX] = fSigmaLoc[0];
AliDebug(2,Form("Adding local equation Z with fMeas=%.6f and fSigma=%.6f",(fMeasLoc[2]-fPintLoc0[2]), fSigmaLoc[2]));
m.fMeas[kZ] = fMeasLoc[2]-fPintLoc0[2];
m.fSigma[kZ] = fSigmaLoc[2];
m.fNGlobFilled = ifill;
fCurrentModule = endModule;
status += Int_t(!zeroX && !zeroZ);
return status;
}
Int_t AliITSAlignMille2::AddLocalEquationTPA(Mille2Data &m)
{
static int cnt = 0;
Bool_t dbg = kFALSE;
if (++cnt>100000) dbg = kFALSE;
int curpoint = fCluster.GetUniqueID()-1;
TGeoHMatrix *tempHMat = GetSensorCurrMatrixSID(fCurrentSensID);
fTPAFitter->GetDResDParams(&fDerivativeLoc[0][0], curpoint);
if (fCurvFitWasConstrained && fFixCurvIfConstraned && !IsZero(fBField))
for (int i=3;i--;) fDerivativeLoc[AliITSTPArrayFit::kR0][i] = 0;
for (Int_t i=fNLocal; i--;) tempHMat->MasterToLocalVect(fDerivativeLoc[i],m.fDerLoc[i]);
int status = 0;
Double_t dGL[3];
Double_t dRdP[3][3];
Double_t dPdG[AliITSAlignMille2Module::kMaxParGeom][3];
fTPAFitter->GetDResDPos(&fDerivativeGlo[0][0], curpoint);
if (fCurrentSensID!=kVtxSensID) for (int i=3;i--;) tempHMat->MasterToLocalVect(fDerivativeGlo[i],dRdP[i]);
else for (int i=3;i--;) for (int j=3;j--;) dRdP[i][j] = fDerivativeGlo[i][j];
if (dbg) {
printf("\nCurrentMod: %s Sens:%d\n",fCurrentModule->GetName(),fCurrentSensID);
printf("Module Matrix: ");
fCurrentModule->GetMatrix()->Print();
for (int i=0;i<3;i++) {
printf("dRdP[M%d][resI] ",i); for (int j=0;j<3;j++) printf(":[%d] %+.3e ",j,dRdP[i][j]); printf("\n");
}
printf("Sensor Matrix: "); tempHMat->Print();
}
UInt_t ifill=0, dfDone = 0;
m.fNModFilled = 0;
AliITSAlignMille2Module* endModule = fCurrentModule;
m.fModuleID[0] = fCurrentModule->GetUniqueID();
do {
if (fCurrentModule->GetNParFree()==0) continue;
status = 1;
if (!fUseGlobalDelta) dfDone = 0;
Bool_t jacobOK = kFALSE;
for (Int_t i=0; i<kNParChGeom; i++) {
if (fCurrentModule->GetParOffset(i)<0) continue;
if (!TestWordBit(dfDone,i)) {
if (!jacobOK) {
if (fCurrentSensID!=kVtxSensID) {
fCurrentModule->CalcDerivDPosDPar(fCluster.GetVolumeID(),fMeasLoc,&dPdG[0][0]);
if (dbg) {
for (int i1=0;i1<3;i1++) {
printf("Jacob:dPdG[gpar%d][Mj]",i1); for (int j1=0;j1<3;j1++) printf(":[%d] %+.3e ",j1,dPdG[i1][j1]); printf("\n");
}
}
}
else {
for (int ip=AliITSAlignMille2Module::kMaxParGeom;ip--;) for (int jp=3;jp--;) dPdG[ip][jp] = (ip==jp) ? 1:0;
}
jacobOK = kTRUE;
}
fDerivativeGlo[i][kX] = dRdP[kX][kX]*dPdG[i][kX] + dRdP[kY][kX]*dPdG[i][kY] + dRdP[kZ][kX]*dPdG[i][kZ];
fDerivativeGlo[i][kY] = dRdP[kX][kY]*dPdG[i][kX] + dRdP[kY][kY]*dPdG[i][kY] + dRdP[kZ][kY]*dPdG[i][kZ];
fDerivativeGlo[i][kZ] = dRdP[kX][kZ]*dPdG[i][kX] + dRdP[kY][kZ]*dPdG[i][kY] + dRdP[kZ][kZ]*dPdG[i][kZ];
SetWordBit(dfDone,i);
}
if (dbg) {
printf("Level %s DGlob[par%d][resJ] ",fCurrentModule->GetName(),i);
for (int k=0;k<3;k++) printf(":[%d] %+.3e ",k, fDerivativeGlo[i][k]); printf("\n");
}
m.fDerGlo[ifill][kX] = fDerivativeGlo[i][kX];
m.fDerGlo[ifill][kY] = fDerivativeGlo[i][kY];
m.fDerGlo[ifill][kZ] = fDerivativeGlo[i][kZ];
m.fParMilleID[ifill++] = fCurrentModule->GetParOffset(i);
}
if ( fCurrentModule->IsSDD() ) {
Bool_t jacOK = kFALSE;
Int_t sddLR = GetVDriftSDD()>0 ? AliITSAlignMille2Module::kDOFDVL : AliITSAlignMille2Module::kDOFDVR;
if (fCurrentModule->GetParOffset(AliITSAlignMille2Module::kDOFT0)>=0) {
if (!TestWordBit(dfDone, AliITSAlignMille2Module::kDOFT0)) {
double vdrift = GetVDriftSDD();
JacobianPosGloLoc(kX,dGL);
jacOK = kTRUE;
fDerivativeGlo[AliITSAlignMille2Module::kDOFT0][kX] =
vdrift*(dRdP[kX][kX]*dGL[kX] + dRdP[kY][kX]*dGL[kY] + dRdP[kZ][kX]*dGL[kZ]);
fDerivativeGlo[AliITSAlignMille2Module::kDOFT0][kY] =
vdrift*(dRdP[kX][kY]*dGL[kX] + dRdP[kY][kY]*dGL[kY] + dRdP[kZ][kY]*dGL[kZ]);
fDerivativeGlo[AliITSAlignMille2Module::kDOFT0][kZ] =
vdrift*(dRdP[kX][kZ]*dGL[kX] + dRdP[kY][kZ]*dGL[kY] + dRdP[kZ][kZ]*dGL[kZ]);
SetWordBit(dfDone, AliITSAlignMille2Module::kDOFT0);
}
m.fDerGlo[ifill][kX] = fDerivativeGlo[AliITSAlignMille2Module::kDOFT0][kX];
m.fDerGlo[ifill][kY] = fDerivativeGlo[AliITSAlignMille2Module::kDOFT0][kY];
m.fDerGlo[ifill][kZ] = fDerivativeGlo[AliITSAlignMille2Module::kDOFT0][kZ];
m.fParMilleID[ifill++] = fCurrentModule->GetParOffset(AliITSAlignMille2Module::kDOFT0);
}
if (fCurrentModule->GetParOffset(sddLR)>=0) {
if (!TestWordBit(dfDone, sddLR)) {
double tdrift = TMath::Sign(GetTDriftSDD(), GetVDriftSDD());
double vdrift = fIsSDDVDriftMult ? TMath::Abs(GetVDriftSDD()) : 1;
if (!jacOK) JacobianPosGloLoc(kX,dGL);
fDerivativeGlo[sddLR][kX] =
-tdrift*vdrift*(dRdP[kX][kX]*dGL[kX] + dRdP[kY][kX]*dGL[kY] + dRdP[kZ][kX]*dGL[kZ]);
fDerivativeGlo[sddLR][kY] =
-tdrift*vdrift*(dRdP[kX][kY]*dGL[kX] + dRdP[kY][kY]*dGL[kY] + dRdP[kZ][kY]*dGL[kZ]);
fDerivativeGlo[sddLR][kZ] =
-tdrift*vdrift*(dRdP[kX][kZ]*dGL[kX] + dRdP[kY][kZ]*dGL[kY] + dRdP[kZ][kZ]*dGL[kZ]);
SetWordBit(dfDone, sddLR);
}
m.fDerGlo[ifill][kX] = fDerivativeGlo[sddLR][kX];
m.fDerGlo[ifill][kY] = fDerivativeGlo[sddLR][kY];
m.fDerGlo[ifill][kZ] = fDerivativeGlo[sddLR][kZ];
m.fParMilleID[ifill++] = fCurrentModule->GetParOffset(sddLR);
}
}
m.fModuleID[m.fNModFilled++] = fCurrentModule->GetUniqueID();
} while( (fCurrentModule=fCurrentModule->GetParent()) );
fTPAFitter->GetResiduals(fPintLoc , curpoint);
for (int i=3;i--;) fPintLoc[i] = -fPintLoc[i];
if (fCurrentSensID!=kVtxSensID) tempHMat->MasterToLocalVect(fPintLoc,m.fMeas);
else for (int i=3;i--;) m.fMeas[i] = fPintLoc[i];
if (dbg) {
printf("res(meas-loc) "); for (int k=0;k<3;k++) printf(":[%d] %+.3e ",k,m.fMeas[k]); printf("\n");
printf("Fin:%s %+e %+e\n",endModule->GetName(), fDerivativeGlo[kZ][kZ], fPintLoc[kZ]);
}
m.fSigma[kX] = fSigmaLoc[kX];
m.fSigma[kY] = fSigmaLoc[kY];
m.fSigma[kZ] = fSigmaLoc[kZ];
m.fNGlobFilled = ifill;
fCurrentModule = endModule;
return status;
}
void AliITSAlignMille2::SetLocalEquations(const Mille2Data *marr, Int_t neq)
{
Bool_t locPatt[kNLocal] = {0};
for (int i=fNLocal; i--;) {
if (locPatt[i]) continue;
for (Int_t j=0; j<neq; j++) for (int ic=3;ic--;) if (!IsZero(marr[j].fDerLoc[i][ic])) locPatt[i]=kTRUE;
}
for (Int_t j=0; j<neq; j++) {
const Mille2Data &m = marr[j];
Bool_t filled = kFALSE;
for (int ic=3;ic--;) {
if (ic==kY && !fUseLocalYErr && !(m.fModuleID[0]==fDiamondModID)) continue;
AliDebug(2,Form("setting local equation %c with fMeas=%.6f and fSigma=%.6f",fgkXYZ[ic],m.fMeas[ic], m.fSigma[ic]));
Int_t nzero = 0, naddl = 0;
for (int i=0;i<=fNLocal;i++) if (locPatt[i]) nzero += SetLocalDerivative(naddl++,m.fDerLoc[i][ic] );
if (nzero==fNLocal) {
AliInfo(Form("Skipping %c residual due to the zero derivatives!",fgkXYZ[ic]));
continue;
}
for (int i=m.fNGlobFilled;i--;) SetGlobalDerivative( m.fParMilleID[i] , m.fDerGlo[i][ic] );
fMillepede->SetLocalEquation(fGlobalDerivatives, fLocalDerivatives, m.fMeas[ic], m.fSigma[ic]);
filled = kTRUE;
}
if (filled) for (int i=m.fNModFilled;i--;) GetMilleModule(m.fModuleID[i])->IncNProcessedPoints();
}
double wgh = 1;
if (GetWeightPt() && fTPAFitter) {
wgh = fTPAFitter->GetPt();
if (wgh>10) wgh = 10.;
if (wgh<0) wgh = fTPAFitter->IsTypeCosmics() ? 7 : 0.5;
if (GetWeightPt()>0) wgh = TMath::Power(wgh,GetWeightPt());
}
fMillepede->SetRecordWeight(wgh*fTrackWeight);
fMillepede->SetRecordRun(fRunID);
}
Int_t AliITSAlignMille2::GlobalFit()
{
if (!fIsMilleInit) Init();
ApplyPreConstraints();
int res = fMillepede->GlobalFit();
AliInfo(Form("%s fitting global parameters!",res ? "Done":"Failed"));
if (res) {
for (int imd=fNModules;imd--;) {
AliITSAlignMille2Module* mod = GetMilleModule(imd);
int nprocp = 0;
for (int ip=mod->GetNParTot();ip--;) {
int idp = mod->GetParOffset(ip);
if (idp<0) continue;
mod->SetParVal(ip,fMillepede->GetFinalParam(idp));
mod->SetParErr(ip,fMillepede->GetFinalError(idp));
int np = fMillepede->GetProcessedPoints(idp);
if (TMath::Abs(np)>TMath::Abs(nprocp)) nprocp = np;
}
if (!mod->GetNProcessedPoints()) mod->SetNProcessedPoints(nprocp);
}
}
ApplyPostConstraints();
return res;
}
void AliITSAlignMille2::PrintGlobalParameters()
{
if (!fIsMilleInit) {
AliInfo("Millepede has not been initialized!");
return;
}
fMillepede->PrintGlobalParameters();
}
Int_t AliITSAlignMille2::LoadSuperModuleFile(const Char_t *sfile)
{
AliInfo(Form("Loading SuperModule definitions from %s",sfile));
TFile *smf=TFile::Open(sfile);
if (!smf->IsOpen()) {
AliInfo(Form("Cannot open supermodule file %s",sfile));
return -1;
}
TClonesArray *sma=(TClonesArray*)smf->Get("ITSMilleSuperModules");
if (!sma) {
AliInfo(Form("Cannot find ITSMilleSuperModules array in file"));
return -2;
}
Int_t nsma=sma->GetEntriesFast();
AliInfo(Form("Array of SuperModules with %d entries\n",nsma));
Char_t st[2048];
char symname[250];
UShort_t volid;
TGeoHMatrix m;
for (Int_t i=0; i<nsma; i++) {
AliAlignObjParams *a = (AliAlignObjParams*)sma->UncheckedAt(i);
volid=a->GetVolUID();
strncpy(st,a->GetSymName(),TMath::Min(sizeof(st),strlen(a->GetSymName())+1));
a->GetMatrix(m);
memset(symname,0,250*sizeof(char));
sscanf(st,"%249s",symname);
char *stp=strstr(st,"ModuleList:");
if (!stp) return -3;
stp += 11;
int idx[2200];
char spp[200]; int jp=0;
char cl[20];
strncpy(st,stp,TMath::Min(sizeof(st),strlen(stp)+1));
int l=strlen(st);
int j=0;
int n=0;
while (j<=l) {
if (st[j]==9 || st[j]==32 || st[j]==10 || st[j]==0) {
spp[jp]=0;
jp=0;
if (strlen(spp)) {
int k=strcspn(spp,"-");
if (k<int(strlen(spp))) {
strncpy(cl,&(spp[k+1]), TMath::Min(sizeof(cl),strlen(&spp[k+1])+1));
spp[k]=0;
int ifrom=atoi(spp); int ito=atoi(cl);
for (int b=ifrom; b<=ito; b++) {
idx[n]=b;
n++;
}
}
else {
idx[n]=atoi(spp);
n++;
}
}
}
else {
spp[jp]=st[j];
jp++;
}
j++;
}
UShort_t volidsv[2198];
for (j=0;j<n;j++) {
volidsv[j]=AliITSAlignMille2Module::GetVolumeIDFromIndex(idx[j]);
if (!volidsv[j]) {
AliInfo(Form("Index %d not valid (range 0->%d)",idx[j],kMaxITSSensID));
return -5;
}
}
Int_t smindex=int(2198+volid-14336);
fSuperModule.AddAtAndExpand(new AliITSAlignMille2Module(smindex,volid,symname,&m,n,volidsv),fNSuperModules);
fNSuperModules++;
}
smf->Close();
return 0;
}
void AliITSAlignMille2::ConstrainModuleSubUnitsMean(Int_t idm, Double_t val, UInt_t pattern)
{
if (fIsMilleInit) {
AliInfo("Millepede has been already initialized: no constrain may be added!");
return;
}
if (!GetMilleModule(idm)->GetNChildren()) return;
TString nm = "cstrSUMean";
nm += GetNConstraints();
AliITSAlignMille2Constraint *cstr = new AliITSAlignMille2Constraint(nm.Data(),AliITSAlignMille2Constraint::kTypeMean,
idm,val,pattern);
cstr->SetConstraintID(GetNConstraints());
fConstraints.Add(cstr);
}
void AliITSAlignMille2::ConstrainModuleSubUnitsMedian(Int_t idm, Double_t val, UInt_t pattern)
{
if (fIsMilleInit) {
AliInfo("Millepede has been already initialized: no constrain may be added!");
return;
}
if (!GetMilleModule(idm)->GetNChildren()) return;
TString nm = "cstrSUMed";
nm += GetNConstraints();
AliITSAlignMille2Constraint *cstr = new AliITSAlignMille2Constraint(nm.Data(),AliITSAlignMille2Constraint::kTypeMedian,
idm,val,pattern);
cstr->SetConstraintID(GetNConstraints());
fConstraints.Add(cstr);
}
void AliITSAlignMille2::ConstrainOrphansMean(Double_t val, UInt_t pattern)
{
if (fIsMilleInit) {
AliInfo("Millepede has been already initialized: no constrain may be added!");
return;
}
TString nm = "cstrOMean";
nm += GetNConstraints();
AliITSAlignMille2Constraint *cstr = new AliITSAlignMille2Constraint(nm.Data(),AliITSAlignMille2Constraint::kTypeMean,
-1,val,pattern);
cstr->SetConstraintID(GetNConstraints());
fConstraints.Add(cstr);
}
void AliITSAlignMille2::ConstrainOrphansMedian(Double_t val, UInt_t pattern)
{
if (fIsMilleInit) {
AliInfo("Millepede has been already initialized: no constrain may be added!");
return;
}
TString nm = "cstrOMed";
nm += GetNConstraints();
AliITSAlignMille2Constraint *cstr = new AliITSAlignMille2Constraint(nm.Data(),AliITSAlignMille2Constraint::kTypeMedian,
-1,val,pattern);
cstr->SetConstraintID(GetNConstraints());
fConstraints.Add(cstr);
}
void AliITSAlignMille2::ConstrainLocal(const Char_t* name,Double_t *parcf,Int_t npar,Double_t val,Double_t err)
{
if (fIsMilleInit) {
AliInfo("Millepede has been already initialized: no constrain may be added!");
return;
}
AliITSAlignMille2ConstrArray *cstr = new AliITSAlignMille2ConstrArray(name,parcf,npar,val,err);
cstr->SetConstraintID(GetNConstraints());
fConstraints.Add(cstr);
}
void AliITSAlignMille2::ApplyGaussianConstraint(const AliITSAlignMille2ConstrArray* cstr)
{
int nmod = cstr->GetNModules();
double jacobian[AliITSAlignMille2Module::kMaxParGeom][AliITSAlignMille2Module::kMaxParGeom];
if (cstr->GetPattern()==BIT(AliITSAlignMille2Module::kDOFT0)) {
for (int i=0;i<cstr->GetNModules()-1;i++) {
AliITSAlignMille2Module *mdI = GetMilleModule(cstr->GetModuleID(i));
if (!mdI->IsFreeDOF(AliITSAlignMille2Module::kDOFT0)) continue;
for (int j=i+1;j<cstr->GetNModules();j++) {
AliITSAlignMille2Module *mdJ = GetMilleModule(cstr->GetModuleID(j));
if (!mdJ->IsFreeDOF(AliITSAlignMille2Module::kDOFT0)) continue;
ResetLocalEquation();
fGlobalDerivatives[mdI->GetParOffset(AliITSAlignMille2Module::kDOFT0)] = 1;
fGlobalDerivatives[mdJ->GetParOffset(AliITSAlignMille2Module::kDOFT0)] =-1;
AddConstraint(fGlobalDerivatives, 0, 1.E-6);
}
}
return;
}
for (int imd=nmod;imd--;) {
int modID = cstr->GetModuleID(imd);
AliITSAlignMille2Module* mod = GetMilleModule(modID);
ResetLocalEquation();
int nadded = 0;
double value = cstr->GetValue();
double sigma = cstr->GetError();
if (IsConstraintWrtRef()) {
Double_t precal[AliITSAlignMille2Module::kMaxParTot];
Double_t refcal[AliITSAlignMille2Module::kMaxParTot];
for (int ip=AliITSAlignMille2Module::kMaxParTot;ip--;) {precal[ip]=0; refcal[ip] = 0.;}
AliAlignObjParams* parref = GetConstrRefObject(mod->GetName());
if (parref) parref->GetPars(refcal, refcal+3);
if (fPrealignment) {
AliAlignObjParams *preo = GetPrealignedObject(mod->GetName());
if (preo) {
TGeoHMatrix preMat,tmpMat = *mod->GetMatrix();
preo->GetMatrix(preMat);
preMat.MultiplyLeft( &tmpMat.Inverse() );
tmpMat.MultiplyLeft( &preMat );
AliAlignObjParams algob;
algob.SetMatrix(tmpMat);
algob.GetPars(precal,precal+3);
}
}
for (int ipar=cstr->GetNCoeffs();ipar--;) value += (refcal[ipar]-precal[ipar])*cstr->GetCoeff(ipar);
}
if (fUseGlobalDelta) mod->CalcDerivLocGlo(&jacobian[0][0]);
for (int ipar=cstr->GetNCoeffs();ipar--;) {
double coef = cstr->GetCoeff(ipar);
if (IsZero(coef)) continue;
if (!fUseGlobalDelta || ipar>= AliITSAlignMille2Module::kMaxParGeom) {
int parPos = mod->GetParOffset(ipar);
if (parPos<0) continue;
fGlobalDerivatives[parPos] += coef;
nadded++;
}
else {
for (int jpar=AliITSAlignMille2Module::kMaxParGeom;jpar--;) {
int parPos = mod->GetParOffset(jpar);
if (parPos<0) continue;
fGlobalDerivatives[parPos] += coef*jacobian[ipar][jpar];
nadded++;
}
}
}
if (nadded) AddConstraint(fGlobalDerivatives, value, sigma);
}
}
void AliITSAlignMille2::ApplyPreConstraints()
{
int nconstr = GetNConstraints();
for (int i=0;i<nconstr;i++) {
AliITSAlignMille2Constraint* cstr = GetConstraint(i);
if (cstr->GetType() == AliITSAlignMille2ConstrArray::kTypeGaussian) {
ApplyGaussianConstraint( (AliITSAlignMille2ConstrArray*)cstr);
continue;
}
if (cstr->GetType() == AliITSAlignMille2Constraint::kTypeMedian) continue;
if (!fUseGlobalDelta) continue;
int imd = cstr->GetModuleID();
if (imd>=0) {
AliITSAlignMille2Module* mod = GetMilleModule(imd);
UInt_t pattern = 0;
for (int ipar=mod->GetNParTot();ipar--;) {
if (!cstr->IncludesParam(ipar)) continue;
if (mod->GetParOffset(ipar)<0) continue;
pattern |= 0x1<<ipar;
cstr->SetApplied(ipar);
}
ConstrainModuleSubUnits(imd,cstr->GetValue(),pattern);
}
else if (!PseudoParentsAllowed()) {
ConstrainOrphans(cstr->GetValue(),(UInt_t)cstr->GetPattern());
cstr->SetApplied(-1);
}
}
for (int imd=0;imd<fNModules;imd++) {
AliITSAlignMille2Module* mod = GetMilleModule(imd);
if (mod->IsSDD() && mod->IsVDriftLRSame()) TieSDDVDriftsLR(mod);
}
}
void AliITSAlignMille2::ApplyPostConstraints()
{
int nconstr = GetNConstraints();
Bool_t convGlo = kFALSE;
int ntodo = 0;
for (int i=0;i<nconstr;i++) {
AliITSAlignMille2Constraint* cstr = GetConstraint(i);
if (cstr->GetType() == AliITSAlignMille2ConstrArray::kTypeGaussian) continue;
if (cstr->GetRemainingPattern() == 0) continue;
ntodo++;
}
if (!ntodo) return;
if (!fUseGlobalDelta) {
ConvertParamsToGlobal();
convGlo = kTRUE;
}
for (int i=0;i<nconstr;i++) {
AliITSAlignMille2Constraint* cstr = GetConstraint(i);
if (cstr->GetType() == AliITSAlignMille2ConstrArray::kTypeGaussian) continue;
int imd = cstr->GetModuleID();
if (imd>=0) {
AliITSAlignMille2Module* mod = GetMilleModule(imd);
if (mod->IsNotInConf()) continue;
UInt_t pattern = 0;
for (int ipar=mod->GetNParTot();ipar--;) {
if (cstr->IsApplied(ipar)) continue;
if (!cstr->IncludesParam(ipar)) continue;
if (!mod->IsFreeDOF(ipar)) continue;
pattern |= 0x1<<ipar;
cstr->SetApplied(ipar);
}
if (pattern) PostConstrainModuleSubUnits(cstr->GetType(),cstr->GetModuleID(),cstr->GetValue(),pattern);
}
else if (PseudoParentsAllowed()) {
UInt_t pattern = (UInt_t)cstr->GetRemainingPattern();
PostConstrainOrphans(cstr->GetType(),cstr->GetValue(),pattern);
cstr->SetApplied(-1);
}
}
if (convGlo) ConvertParamsToLocal();
}
void AliITSAlignMille2::ConstrainModuleSubUnits(Int_t idm, Double_t val, UInt_t pattern)
{
AliITSAlignMille2Module* mod = GetMilleModule(idm);
for (int ip=0;ip<kNParCh;ip++) {
if ( !((pattern>>ip)&0x1) ) continue;
ResetLocalEquation();
int nadd = 0;
for (int ich=mod->GetNChildren();ich--;) {
int idpar = ((AliITSAlignMille2Module*)mod->GetChild(ich))->GetParOffset(ip);
if (idpar<0) continue;
fGlobalDerivatives[idpar] = 1.0;
nadd++;
}
if (nadd>0) {
AddConstraint(fGlobalDerivatives,val);
AliInfo(Form("Constrained param %d for %d submodules of module #%d: %s",ip,nadd,idm,mod->GetName()));
}
}
}
void AliITSAlignMille2::ConstrainOrphans(Double_t val, UInt_t pattern)
{
for (int ip=0;ip<kNParCh;ip++) {
if ( !((pattern>>ip)&0x1) ) continue;
ResetLocalEquation();
int nadd = 0;
for (int imd=fNModules;imd--;) {
AliITSAlignMille2Module* mod = GetMilleModule(imd);
if (mod->IsNotInConf()) continue;
AliITSAlignMille2Module* par = mod->GetParent();
while (par && par->IsNotInConf() ) par = par->GetParent();
if (par) continue;
int idpar = mod->GetParOffset(ip);
if (idpar<0) continue;
fGlobalDerivatives[idpar] = 1.0;
nadd++;
}
if (nadd>0) {
AddConstraint(fGlobalDerivatives,val);
AliInfo(Form("Constrained param %d for %d orphan modules",ip,nadd));
}
}
}
void AliITSAlignMille2::PostConstrainModuleSubUnits(Int_t type,Int_t idm, Double_t val, UInt_t pattern)
{
AliITSAlignMille2Module* parent = GetMilleModule(idm);
int nc = parent->GetNChildren();
double *tmpArr = new double[nc];
for (int ip=0;ip<kNParCh;ip++) {
int npc = 0;
if ( !((pattern>>ip)&0x1) || !parent->IsFreeDOF(ip)) continue;
int nfree = 0;
for (int ich=nc;ich--;) {
AliITSAlignMille2Module* child = parent->GetChild(ich);
tmpArr[nfree++] = child->GetParVal(ip);
}
double median=0,mean=0;
for (int ic0=0;ic0<nfree;ic0++) {
mean += tmpArr[ic0];
for (int ic1=ic0+1;ic1<nfree;ic1++)
if (tmpArr[ic0]>tmpArr[ic1]) {double tv=tmpArr[ic0]; tmpArr[ic0]=tmpArr[ic1]; tmpArr[ic1]=tv;}
}
int kmed = nfree/2;
median = (tmpArr[kmed]+tmpArr[nfree-kmed-1])/2.;
if (nfree>0) mean /= nfree;
double shift = val - (type==AliITSAlignMille2Constraint::kTypeMean ? mean : median);
for (int ich=nc;ich--;) {
AliITSAlignMille2Module* child = parent->GetChild(ich);
child->SetParVal(ip, child->GetParVal(ip) + shift);
npc++;
}
parent->SetParVal(ip, parent->GetParVal(ip) - shift);
AliInfo(Form("%s constraint: added %+f shift to param[%d] of %d children of module %d: %s",
type==AliITSAlignMille2Constraint::kTypeMean ? "MEAN" : "MEDIAN",shift,
ip,npc,idm,parent->GetName()));
}
delete[] tmpArr;
}
void AliITSAlignMille2::PostConstrainOrphans(Int_t type,Double_t val, UInt_t pattern)
{
int nc = fNModules;
int norph = 0;
for (int ich=nc;ich--;) {
AliITSAlignMille2Module *par= GetMilleModule(ich)->GetParent();
while (par && par->IsNotInConf()) par = par->GetParent();
if (!par) norph ++;
}
if (!norph) return;
double *tmpArr = new double[norph];
for (int i=norph;i--;) tmpArr[i] = 0;
for (int ip=0;ip<kNParCh;ip++) {
int npc = 0;
if ( !((pattern>>ip)&0x1)) continue;
int nfree = 0;
for (int ich=nc;ich--;) {
AliITSAlignMille2Module* child = GetMilleModule(ich);
if (child->IsNotInConf()) continue;
AliITSAlignMille2Module* par = child->GetParent();
while (par && par->IsNotInConf()) par = par->GetParent();
if (par) continue;
tmpArr[nfree++] = child->GetParVal(ip);
}
double median=0,mean=0;
for (int ic0=0;ic0<nfree;ic0++) {
mean += tmpArr[ic0];
for (int ic1=ic0+1;ic1<nfree;ic1++)
if (tmpArr[ic0]>tmpArr[ic1]) {double tv=tmpArr[ic0]; tmpArr[ic0]=tmpArr[ic1]; tmpArr[ic1]=tv;}
}
int kmed = nfree/2;
median = (tmpArr[kmed]+tmpArr[nfree-kmed-1])/2.;
if (nfree>0) mean /= nfree;
double shift = val - (type==AliITSAlignMille2Constraint::kTypeMean ? mean : median);
for (int ich=nc;ich--;) {
AliITSAlignMille2Module* child = GetMilleModule(ich);
if (child->IsNotInConf()) continue;
AliITSAlignMille2Module* par = child->GetParent();
while (par && par->IsNotInConf()) par = par->GetParent();
if (par) continue;
child->SetParVal(ip, child->GetParVal(ip) + shift);
npc++;
}
AliInfo(Form("%s constraint: added %+f shift to param[%d] of %d orphan modules",
type==AliITSAlignMille2Constraint::kTypeMean ? "MEAN" : "MEDIAN",shift,
ip,npc));
}
delete[] tmpArr;
}
Bool_t AliITSAlignMille2::IsParModConstrained(const AliITSAlignMille2Module* mod,Int_t par, Bool_t &meanmed, Bool_t &gaussian) const
{
meanmed = gaussian = kFALSE;
if ( mod->IsParConstrained(par) ) gaussian = kTRUE;
for (int icstr=GetNConstraints();icstr--;) {
AliITSAlignMille2Constraint* cstr = GetConstraint(icstr);
if (!cstr->IncludesModPar(mod,par)) continue;
if (cstr->GetType()==AliITSAlignMille2ConstrArray::kTypeGaussian) gaussian = kTRUE;
else meanmed = kTRUE;
if (meanmed && gaussian) break;
}
return meanmed||gaussian;
}
Bool_t AliITSAlignMille2::IsParModFamilyVaried(const AliITSAlignMille2Module* mod,Int_t par,Int_t depth) const
{
if (depth<0) return kFALSE;
if (mod->GetParOffset(par)>=0) return kTRUE;
for (int icld=mod->GetNChildren();icld--;) {
AliITSAlignMille2Module* child = mod->GetChild(icld);
if (IsParModFamilyVaried(child, par, depth-1)) return kTRUE;
}
return kFALSE;
}
Bool_t AliITSAlignMille2::IsParFamilyFree(const AliITSAlignMille2Module* mod,Int_t par,Int_t depth) const
{
if (depth<0) return kFALSE;
for (int icld=mod->GetNChildren();icld--;) {
AliITSAlignMille2Module* child = mod->GetChild(icld);
Bool_t cstMM=kFALSE,cstGS=kFALSE;
if (!IsParModConstrained(child,par,cstMM,cstGS) || !cstGS ) return kTRUE;
if (IsParFamilyFree(child,par,depth-1)) return kTRUE;
}
return kFALSE;
}
Double_t AliITSAlignMille2::GetTDriftSDD() const
{
double t = fCluster.GetDriftTime();
return t - fDriftTime0[ fCluster.GetUniqueID()-1 ];
}
Double_t AliITSAlignMille2::GetVDriftSDD() const
{
return fDriftSpeed[ fCluster.GetUniqueID()-1 ];
}
Bool_t AliITSAlignMille2::FixedOrphans() const
{
if (!IsConfigured()) {
AliInfo("Still not configured");
return kFALSE;
}
for (int i=0;i<fNModules;i++) {
AliITSAlignMille2Module* md = GetMilleModule(i);
if (md->IsNotInConf()) continue;
if (md->GetParent()==0 && md->GetNParFree()==0) return kTRUE;
}
return kFALSE;
}
void AliITSAlignMille2::ConvertParamsToGlobal() const
{
double pars[AliITSAlignMille2Module::kMaxParGeom];
for (int imd=fNModules;imd--;) {
AliITSAlignMille2Module* mod = GetMilleModule(imd);
if (mod->GeomParamsGlobal()) continue;
mod->GetGeomParamsGlo(pars);
mod->SetParVals(pars,AliITSAlignMille2Module::kMaxParGeom);
mod->SetGeomParamsGlobal(kTRUE);
}
}
void AliITSAlignMille2::ConvertParamsToLocal() const
{
double pars[AliITSAlignMille2Module::kMaxParGeom];
for (int imd=fNModules;imd--;) {
AliITSAlignMille2Module* mod = GetMilleModule(imd);
if (!mod->GeomParamsGlobal()) continue;
mod->GetGeomParamsLoc(pars);
mod->SetParVals(pars,AliITSAlignMille2Module::kMaxParGeom);
mod->SetGeomParamsGlobal(kFALSE);
}
}
void AliITSAlignMille2::SetBField(Double_t b)
{
if (IsZero(b,1e-5)) {
fBField = 0.0;
fBOn = kFALSE;
fNLocal = 4;
}
else {
fBField = b;
fBOn = kTRUE;
fNLocal = 5;
}
}
Int_t AliITSAlignMille2::ProcessUserInfo(TList* userInfo)
{
if (!userInfo) { AliInfo("No UserInfo is provided"); return 0;}
TMap *cdbMap=0;
TList* cdbList=0;
TObjString *objStr,*objStr1,*keyStr;
TString cdbStr;
AliCDBManager* man = AliCDBManager::Instance();
man->SetCacheFlag(kFALSE);
int run = userInfo->GetUniqueID();
if (run>0) SetRunID(run);
AliInfo(Form("UserInfo corresponds to run#%d",run));
cdbMap = (TMap*)userInfo->FindObject("cdbMap");
const TMap *curMap = man->GetStorageMap();
if (!cdbMap) {AliInfo("No CDB Map found in UserInfo");}
else {
if ((objStr=(TObjString*)cdbMap->GetValue("default"))) {
if ((objStr1=(TObjString*)curMap->GetValue("default")) && objStr1->GetUniqueID()) {
AliInfo(Form("OCDB default path from UserInfo: %s is overriden by user setting %s",objStr->GetName(),objStr1->GetName()));
}
else {
cdbStr = objStr->GetString();
man->UnsetDefaultStorage();
if (man->GetRaw()) man->SetRaw(kFALSE);
if (cdbStr.BeginsWith("raw://")) cdbStr = "raw://";
AliInfo(Form("Default CDB Storage from UserInfo: %s",cdbStr.Data()));
man->SetDefaultStorage( cdbStr.Data() );
}
}
if (man->GetRaw() && run>0) man->SetRun(run);
TIter itMap(cdbMap);
while( (keyStr=(TObjString*)itMap.Next()) ) {
TString keyS = keyStr->GetString();
if ( keyS == "default" ) continue;
TObjString* curPath = (TObjString*)curMap->GetValue(keyStr->GetName());
if (curPath && curPath->GetUniqueID()) {
AliInfo(Form("Storage for %s from UserInfo\n is overriden by user setting %s",keyS.Data(),curPath->GetName()));
continue;
}
man->SetSpecificStorage( keyS.Data(), cdbMap->GetValue(keyS)->GetName() );
}
}
cdbList = (TList*)userInfo->FindObject("cdbList");
if (!cdbList) {AliInfo("No CDB List found in UserInfo");}
else {
GetPathFromUserInfo(cdbList,"GRP/Geometry/Data",fIniGeomPath ,kSameInitGeomBit);
GetPathFromUserInfo(cdbList,"ITS/Align/Data" ,fIniDeltaPath,kSameInitDeltasBit);
GetPathFromUserInfo(cdbList,"ITS/Calib/RespSDD",fIniSDDRespPath,kSameInitSDDRespBit);
GetPathFromUserInfo(cdbList,"ITS/Calib/DriftSpeedSDD",fIniSDDVDriftPath,kSameInitSDDVDriftBit);
GetPathFromUserInfo(cdbList,"ITS/Calib/MapsTimeSDD",fIniSDDCorrMapPath,kSameInitSDDCorrMapBit);
GetPathFromUserInfo(cdbList,"GRP/Calib/MeanVertexSPD",fDiamondPath,kSameDiamondBit);
}
TList *bzlst = (TList*)userInfo->FindObject("BzkGauss");
if (bzlst && bzlst->At(0)) {
objStr = (TObjString*)bzlst->At(0);
SetBField( objStr->GetString().Atof() );
AliInfo(Form("Magnetic field from UserInfo: %+.2e",GetBField()));
}
return 0;
}
Int_t AliITSAlignMille2::GetPathFromUserInfo(const TList* cdbList,const char* calib,TString& path, Int_t useBit)
{
TIter itList(cdbList);
if (useBit>=0) ResetBit(useBit);
TObjString* objStr;
while( (objStr=(TObjString*)itList.Next()) )
if (objStr->GetString().Contains(calib)) {
TString newpath = objStr->GetString();
AliInfo(Form("Found path in UserInfo: %s",newpath.Data()));
if ( useBit>=0 && (fUserProvided&useBit) ) {
AliInfo(Form("Will use the one provided in config: %s",path.Data()));
SetBit(useBit);
}
else if ( useBit>=0 && (newpath == path) ) {
AliInfo(Form("Path %s is the same as already loaded",path.Data()));
SetBit(useBit);
}
else path = newpath;
return 0;
}
AliInfo(Form("Did not find path for %s in UserInfo",calib));
path = "";
return -1;
}
Int_t AliITSAlignMille2::LoadSDDResponse(TString& path, AliITSresponseSDD *&resp)
{
if (path.IsNull()) return 0;
AliInfo(Form("Loading SDD response from %s",path.Data()));
AliCDBEntry *entry = 0;
delete resp;
resp = 0;
while(1) {
if (path.BeginsWith("path: ")) {
entry = GetCDBEntry(path.Data());
if (!entry) break;
resp = (AliITSresponseSDD*) entry->GetObject();
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
break;
}
if (gSystem->AccessPathName(path.Data())) break;
TFile* precf = TFile::Open(path.Data());
if (precf->FindKey("AliITSresponseSDD")) resp = (AliITSresponseSDD*)precf->Get("AliITSresponseSDD");
else if (precf->FindKey("AliCDBEntry") && (entry=(AliCDBEntry*)precf->Get("AliCDBEntry"))) {
resp = (AliITSresponseSDD*) entry->GetObject();
if (resp && resp->InheritsFrom(AliITSresponseSDD::Class())) entry->SetObject(NULL);
else resp = 0;
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
delete entry;
}
precf->Close();
delete precf;
break;
}
if (!resp) {AliError(Form("Failed to load SDD response from %s",path.Data())); return -1;}
return 0;
}
Int_t AliITSAlignMille2::LoadSDDVDrift(TString& path, TObjArray *&arr)
{
if (path.IsNull()) return 0;
AliInfo(Form("Loading SDD VDrift from %s",path.Data()));
AliCDBEntry *entry = 0;
delete arr;
arr = 0;
while(1) {
if (path.BeginsWith("path: ")) {
entry = GetCDBEntry(path.Data());
if (!entry) break;
arr = (TObjArray*) entry->GetObject();
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
break;
}
if (gSystem->AccessPathName(path.Data())) break;
TFile* precf = TFile::Open(path.Data());
if (precf->FindKey("TObjArray")) arr = (TObjArray*)precf->Get("TObjArray");
else if (precf->FindKey("AliCDBEntry") && (entry=(AliCDBEntry*)precf->Get("AliCDBEntry"))) {
arr = (TObjArray*) entry->GetObject();
if (arr && arr->InheritsFrom(TObjArray::Class())) entry->SetObject(NULL);
else arr = 0;
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
delete entry;
}
precf->Close();
delete precf;
break;
}
if (!arr) {AliError(Form("Failed to load SDD vdrift from %s",path.Data())); return -1;}
arr->SetOwner(kTRUE);
return 0;
}
Int_t AliITSAlignMille2::LoadSDDCorrMap(TString& path, AliITSCorrectSDDPoints *&map)
{
if (path.IsNull()) return 0;
AliInfo(Form("Loading SDD Correction Maps from %s",path.Data()));
AliCDBEntry *entry = 0;
delete map;
map = 0;
TObjArray* arr = 0;
while(1) {
if (path.BeginsWith("path: ")) {
entry = GetCDBEntry(path.Data());
if (!entry) break;
arr = (TObjArray*) entry->GetObject();
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
break;
}
if (gSystem->AccessPathName(path.Data())) break;
TFile* precf = TFile::Open(path.Data());
if (precf->FindKey("TObjArray")) arr = (TObjArray*)precf->Get("TObjArray");
else if (precf->FindKey("AliCDBEntry") && (entry=(AliCDBEntry*)precf->Get("AliCDBEntry"))) {
arr = (TObjArray*) entry->GetObject();
if (arr && arr->InheritsFrom(TObjArray::Class())) entry->SetObject(NULL);
else arr = 0;
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
delete entry;
}
precf->Close();
delete precf;
break;
}
if (!arr) {AliError(Form("Failed to load SDD Correction Map from %s",path.Data())); return -1;}
arr->SetOwner(kTRUE);
map = new AliITSCorrectSDDPoints(arr);
return 0;
}
Int_t AliITSAlignMille2::LoadPreSDDCalib()
{
AliInfo(Form("Loading SDD Calibration set for run %d",fRunID));
AliCDBManager* man = AliCDBManager::Instance();
man->SetRun(fRunID);
AliCDBEntry *entry = man->Get("ITS/Calib/MapsTimeSDD");
if(!entry){
AliError("Error accessing OCDB: SDD maps not found");
return -1;
}
delete fPreCorrMapSDD;
TObjArray* arr = (TObjArray*) entry->GetObject();
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
arr->SetOwner(kTRUE);
fPreCorrMapSDD = new AliITSCorrectSDDPoints(arr);
entry = man->Get("ITS/Calib/RespSDD");
if(!entry){
AliError("Error accessing OCDB: SDD response not found");
return -1;
}
delete fPreRespSDD;
fPreRespSDD = (AliITSresponseSDD*) entry->GetObject();
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
entry = man->Get("ITS/Calib/DriftSpeedSDD");
if(!entry){
AliError("Error accessing OCDB: SDD Drift speed not found");
return -1;
}
delete fPreVDriftSDD;
fPreVDriftSDD = (TObjArray*) entry->GetObject();
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
delete entry;
return 0;
}
Int_t AliITSAlignMille2::LoadDiamond(TString& path)
{
if (path.IsNull()) return 0;
AliInfo(Form("Loading Diamond Constraint from %s",path.Data()));
AliCDBEntry *entry = 0;
AliESDVertex *vtx = 0;
while(1) {
if (path.BeginsWith("path: ")) {
entry = GetCDBEntry(path.Data());
if (!entry) break;
vtx = (AliESDVertex*) entry->GetObject();
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
break;
}
if (gSystem->AccessPathName(path.Data())) break;
TFile* precf = TFile::Open(path.Data());
if (precf->FindKey("AliESDVertex")) vtx = (AliESDVertex*)precf->Get("AliESDVertex");
else if (precf->FindKey("AliCDBEntry") && (entry=(AliCDBEntry*)precf->Get("AliCDBEntry"))) {
vtx = (AliESDVertex*) entry->GetObject();
if (vtx && vtx->InheritsFrom(AliESDVertex::Class())) entry->SetObject(NULL);
else vtx = 0;
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
delete entry;
}
precf->Close();
delete precf;
break;
}
if (!vtx) {AliError(Form("Failed to load Diamond constraint from %s",path.Data())); return -1;}
double vtxXYZ[3];
vtx->GetXYZ(vtxXYZ);
for (int i=3;i--;) vtxXYZ[i] -= fCorrDiamond[i];
vtx->SetXYZ(vtxXYZ);
SetVertexConstraint(vtx);
AliInfo("Will use following Diamond Constraint (errors inverted):");
fDiamondI.Print("");
delete vtx;
return 0;
}
Int_t AliITSAlignMille2::LoadDeltas(TString& path, TClonesArray *&arr)
{
if (path.IsNull()) return 0;
AliInfo(Form("Loading Alignment Deltas from %s",path.Data()));
AliCDBEntry *entry = 0;
delete arr;
arr = 0;
while(1) {
if (path.BeginsWith("path: ")) {
entry = GetCDBEntry(path.Data());
if (!entry) break;
arr = (TClonesArray*) entry->GetObject();
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
break;
}
if (gSystem->AccessPathName(path.Data())) break;
TFile* precf = TFile::Open(path.Data());
if (precf->FindKey("ITSAlignObjs")) arr = (TClonesArray*)precf->Get("ITSAlignObjs");
else if (precf->FindKey("AliCDBEntry") && (entry=(AliCDBEntry*)precf->Get("AliCDBEntry"))) {
arr = (TClonesArray*) entry->GetObject();
if (arr && arr->InheritsFrom(TClonesArray::Class())) entry->SetObject(NULL);
else arr = 0;
entry->SetObject(NULL);
entry->SetOwner(kTRUE);
delete entry;
}
precf->Close();
delete precf;
break;
}
if (!arr) {AliError(Form("Failed to load Deltas from %s",path.Data())); return -1;}
return 0;
}
Int_t AliITSAlignMille2::CacheMatricesCurr()
{
TGeoHMatrix mdel;
AliInfo("Building sensors current matrices cache");
fCacheMatrixCurr.Delete();
for (int idx=0;idx<=kMaxITSSensID;idx++) {
int volID = AliITSAlignMille2Module::GetVolumeIDFromIndex(idx);
TGeoHMatrix *mcurr = new TGeoHMatrix();
AliITSAlignMille2Module::SensVolMatrix(volID, mcurr);
fCacheMatrixCurr.AddAtAndExpand(mcurr,idx);
}
TGeoHMatrix *mcurr = new TGeoHMatrix();
fCacheMatrixCurr.AddAtAndExpand(mcurr,kVtxSensID);
fCacheMatrixCurr.SetOwner(kTRUE);
return 0;
}
Int_t AliITSAlignMille2::CacheMatricesOrig()
{
TGeoHMatrix mdel;
AliInfo(Form("Building sensors original matrices cache. InitDeltaPath: %s",fIniDeltaPath.Data()));
if (LoadGeometry(fIniGeomPath)) {AliInfo("Failed to re-load ideal geometry");exit(1);}
fCacheMatrixOrig.Delete();
if (!fIniDeltaPath.IsNull()) {
TClonesArray* prealSav = fPrealignment;
fPrealignment = 0;
if (LoadDeltas(fIniDeltaPath,fPrealignment) || ApplyToGeometry())
{ AliError("Failed to load/apply initial deltas used to produce points"); return -1;}
delete fPrealignment;
fPrealignment = prealSav;
}
for (int idx=0;idx<=kMaxITSSensID;idx++) {
int volID = AliITSAlignMille2Module::GetVolumeIDFromIndex(idx);
TGeoHMatrix *morig = new TGeoHMatrix();
AliITSAlignMille2Module::SensVolMatrix(volID,morig);
fCacheMatrixOrig.AddAtAndExpand(morig,idx);
}
if (fConvertPreDeltas) {
int nmat = fGeoManager->GetNAlignable();
fConvAlgMatOld.Delete();
int nmatSel = 0;
for (int i=0;i<nmat;i++) {
TString nm = fGeoManager->GetAlignableEntry(i)->GetName();
if (!nm.BeginsWith("ITS")) continue;
TGeoHMatrix *mo = new TGeoHMatrix();
(*mo) = *(AliGeomManager::GetMatrix(nm));
fConvAlgMatOld.AddAtAndExpand(mo,nmatSel++);
mo->SetTitle(nm);
mo->SetName(nm);
}
ConvSortHierarchically(fConvAlgMatOld);
}
TGeoHMatrix *mcurr = new TGeoHMatrix();
fCacheMatrixOrig.AddAtAndExpand(mcurr,kVtxSensID);
fCacheMatrixOrig.SetOwner(kTRUE);
fUsePreAlignment = 0;
LoadGeometry(fGeometryPath);
return 0;
}
void AliITSAlignMille2::RemoveHelixFitConstraint()
{
fConstrCharge = 0;
fConstrPT = fConstrPTErr = -1;
}
void AliITSAlignMille2::ConstrainHelixFitPT(Int_t q,Double_t pt,Double_t pterr)
{
fConstrCharge = q==0 ? q:TMath::Sign(1,q);
fConstrPT = pt;
fConstrPTErr = pterr;
fCurvFitWasConstrained = kTRUE;
}
void AliITSAlignMille2::ConstrainHelixFitCurv(Int_t q,Double_t crv,Double_t crverr)
{
const double kCQConv = 0.299792458e-3;
fConstrCharge = q==0 ? q:TMath::Sign(1,q);
if (crv<0 || IsZero(crv)) {
fConstrPT = -1;
fConstrPTErr = -1;
fCurvFitWasConstrained = kFALSE;
}
else {
fConstrPT = TMath::Abs(1./crv*fBField*kCQConv);
fConstrPTErr = crverr>1e-10 ? TMath::Abs(fConstrPT/crv*crverr) : 0.;
fCurvFitWasConstrained = kTRUE;
}
}
TClonesArray* AliITSAlignMille2::CreateDeltas()
{
Bool_t convLoc = kFALSE;
if (!GetUseGlobalDelta()) {
ConvertParamsToGlobal();
convLoc = kTRUE;
}
AliAlignObjParams tempAlignObj;
TGeoHMatrix tempMatX,tempMatY,tempMat1;
TClonesArray *array = new TClonesArray("AliAlignObjParams",10);
TClonesArray &alobj = *array;
int idx = 0;
TGeoManager* geoManager = AliGeomManager::GetGeometry();
int nalgtot = geoManager->GetNAlignable();
for (int ialg=0;ialg<nalgtot;ialg++) {
const char* algname = geoManager->GetAlignableEntry(ialg)->GetName();
AliITSAlignMille2Module* md = GetMilleModuleBySymName(algname);
AliITSAlignMille2Module* parent = md ? md->GetParent(): GetMilleModuleIfContained(algname);
if (md && parent) {
TString mdName = md->GetName();
TString prName = parent->GetName();
if ( mdName.CountChar('/')==2 && mdName.BeginsWith("ITS/SPD") &&
prName.CountChar('/')==1 && mdName.BeginsWith("ITS/SPD") )
parent = parent->GetParent();
}
AliAlignObjParams* preob = GetPrealignedObject(algname);
if (!preob && !md && (!parent || parent->IsAlignable())) continue;
tempMatX.Clear();
if (preob) {
preob->GetMatrix(tempMat1);
tempMatX.MultiplyLeft(&tempMat1);
}
if (md) {
tempAlignObj.SetTranslation( md->GetParVal(0),md->GetParVal(1),md->GetParVal(2));
tempAlignObj.SetRotation( md->GetParVal(3),md->GetParVal(4),md->GetParVal(5));
tempAlignObj.GetMatrix(tempMat1);
tempMatX.MultiplyLeft(&tempMat1);
}
while (parent && !parent->IsAlignable()) {
tempAlignObj.SetTranslation( parent->GetParVal(0),parent->GetParVal(1),parent->GetParVal(2));
tempAlignObj.SetRotation( parent->GetParVal(3),parent->GetParVal(4),parent->GetParVal(5));
tempAlignObj.GetMatrix(tempMat1);
tempMatX.MultiplyLeft(&tempMat1);
parent = parent->GetParent();
}
tempMatY.Clear();
while ( parent ) {
tempAlignObj.SetTranslation( parent->GetParVal(0),parent->GetParVal(1),parent->GetParVal(2));
tempAlignObj.SetRotation( parent->GetParVal(3),parent->GetParVal(4),parent->GetParVal(5));
tempAlignObj.GetMatrix(tempMat1);
tempMatY.MultiplyLeft(&tempMat1);
parent = parent->GetParent();
}
tempMatX.MultiplyLeft(&tempMatY);
tempMatX.Multiply(&tempMatY.Inverse());
if (tempMatX.IsIdentity()) continue;
UShort_t vid = AliITSAlignMille2Module::GetVolumeIDFromSymname(algname);
new(alobj[idx++]) AliAlignObjParams(algname,vid,tempMatX,kTRUE);
}
if (convLoc) ConvertParamsToLocal();
return array;
}
AliITSresponseSDD* AliITSAlignMille2::CreateSDDResponse()
{
AliITSresponseSDD *precal = GetSDDPrecalResp();
if (!precal && fIniVDriftSDD) precal = GetSDDInitResp();
Bool_t isPreCalMult = precal&&precal->IsVDCorrMult() ? kTRUE : kFALSE;
AliITSresponseSDD *calibSDD = new AliITSresponseSDD();
calibSDD->SetVDCorrMult(fIsSDDVDriftMult);
if (precal) {
calibSDD->SetTimeOffset(precal->GetTimeOffset());
calibSDD->SetADC2keV(precal->GetADC2keV());
calibSDD->SetChargevsTime(precal->GetChargevsTime());
for (int ind=kSDDoffsID;ind<kSDDoffsID+kNSDDmod;ind++) {
calibSDD->SetModuleTimeZero(ind, precal->GetTimeZero(ind));
calibSDD->SetDeltaVDrift(ind, precal->GetDeltaVDrift(ind,kFALSE),kFALSE);
calibSDD->SetDeltaVDrift(ind, precal->GetDeltaVDrift(ind,kTRUE ),kTRUE);
calibSDD->SetADCtokeV(ind,precal->GetADCtokeV(ind));
}
}
else for (int ind=kSDDoffsID;ind<kSDDoffsID+kNSDDmod;ind++) calibSDD->SetModuleTimeZero(ind,0);
Bool_t save = kFALSE;
for (int imd=GetNModules();imd--;) {
AliITSAlignMille2Module* md = GetMilleModule(imd);
if (!md->IsSDD()) continue;
if (md->IsFreeDOF(AliITSAlignMille2Module::kDOFT0) ||
md->IsFreeDOF(AliITSAlignMille2Module::kDOFDVL) ||
md->IsFreeDOF(AliITSAlignMille2Module::kDOFDVR)) save = kTRUE;
for (int is=0;is<md->GetNSensitiveVolumes();is++) {
int ind = md->GetSensVolIndex(is);
float t0 = calibSDD->GetTimeZero(ind) + md->GetParVal(AliITSAlignMille2Module::kDOFT0);
double dvL = md->GetParVal(AliITSAlignMille2Module::kDOFDVL);
double dvR = md->GetParVal(AliITSAlignMille2Module::kDOFDVR);
if (!calibSDD->IsVDCorrMult()) {
dvL *= 1e4;
dvR *= 1e4;
double conv = 1;
if (isPreCalMult) conv = 6.4;
dvL += calibSDD->GetDeltaVDrift(ind,kFALSE)*conv;
dvR += calibSDD->GetDeltaVDrift(ind,kTRUE)*conv;
}
else {
double conv = 1;
if (!isPreCalMult) conv = 1./6.4;
dvL += calibSDD->GetDeltaVDrift(ind,kFALSE)*conv;
dvR += calibSDD->GetDeltaVDrift(ind,kTRUE)*conv;
}
calibSDD->SetModuleTimeZero(ind, t0);
calibSDD->SetDeltaVDrift(ind, dvL, kFALSE);
calibSDD->SetDeltaVDrift(ind, dvR, kTRUE);
}
}
if (!save) {
AliInfo("No free parameters for SDD calibration, nothing to save");
delete calibSDD;
calibSDD = 0;
}
return calibSDD;
}
Int_t AliITSAlignMille2::ReloadInitCalib(TList *userInfo)
{
if (!userInfo) {
AliInfo("Reloading of the Calibration parameters was called with empty userInfo");
return 1;
}
if (ProcessUserInfo(userInfo)) {
AliInfo("Error in processing user info");
userInfo->Print();
exit(1);
}
return ReloadInitCalib();
}
Int_t AliITSAlignMille2::ReloadInitCalib()
{
AliInfo(Form("SameInitDelta: %d | SameInitGeom: %d",TestBit(kSameInitDeltasBit), TestBit(kSameInitGeomBit)));
if (!(TestBit(kSameInitDeltasBit) && TestBit(kSameInitGeomBit))) {
if (CacheMatricesOrig()) {
AliInfo("Failed to cache new initial geometry");
exit(1);
}
if (fPrealignment && ApplyToGeometry()) {
AliInfo(Form("Failed re-apply prealigned geometry %s",fPreDeltaPath.Data()));
exit(1);
}
if (fCacheMatrixCurr.GetEntriesFast() != fCacheMatrixOrig.GetEntriesFast()) {
AliInfo(Form("Failed to cache the prealigned geometry %s",fPreDeltaPath.Data()));
exit(1);
}
}
else ResetBit(kSameInitDeltasBit);
if (!TestBit(kSameInitSDDRespBit)) {
if (LoadSDDResponse(fIniSDDRespPath, fIniRespSDD) ) {
AliInfo(Form("Failed to load new SDD response %s",fIniSDDRespPath.Data()));
exit(1);
}
}
else ResetBit(kSameInitSDDRespBit);
if (!TestBit(kSameInitSDDVDriftBit)) {
if (LoadSDDVDrift(fIniSDDVDriftPath, fIniVDriftSDD) ) {
AliInfo(Form("Failed to load new SDD VDrift %s",fIniSDDVDriftPath.Data()));
exit(1);
}
}
else ResetBit(kSameInitSDDRespBit);
if (!TestBit(kSameInitSDDCorrMapBit)) {
if (LoadSDDCorrMap(fIniSDDCorrMapPath, fIniCorrMapSDD) ) {
AliInfo(Form("Failed to load new SDD Correction Map %s",fIniSDDCorrMapPath.Data()));
exit(1);
}
}
else ResetBit(kSameInitSDDRespBit);
if (!TestBit(kSameDiamondBit)) {
if (LoadDiamond(fDiamondPath) ) {
AliInfo(Form("Failed to load new Diamond constraint %s",fDiamondPath.Data()));
exit(1);
}
}
else ResetBit(kSameInitSDDRespBit);
return 0;
}
void AliITSAlignMille2::JacobianPosGloLoc(int locid,double* jacobian)
{
TGeoHMatrix* mat = GetSensorCurrMatrixSID(fCurrentSensID);
const Double_t dpar = 1e-2;
double sav = fMeasLoc[locid];
fMeasLoc[locid] += dpar;
mat->LocalToMaster(fMeasLoc,jacobian);
fMeasLoc[locid] = sav;
for (int i=3;i--;) jacobian[i] = (jacobian[i]-fMeasGlo[i])/dpar;
}
void AliITSAlignMille2::TieSDDVDriftsLR(AliITSAlignMille2Module* mod)
{
ResetLocalEquation();
if ( (mod->IsFreeDOF(AliITSAlignMille2Module::kDOFDVL) + mod->IsFreeDOF(AliITSAlignMille2Module::kDOFDVR))==1) {
AliError("Left/Right VDrift equality is requested for SDD module with only one side VDrift free");
mod->Print();
return;
}
if (mod->GetParOffset(AliITSAlignMille2Module::kDOFDVL)>=0) SetGlobalDerivative(mod->GetParOffset(AliITSAlignMille2Module::kDOFDVL), 1.);
if (mod->GetParOffset(AliITSAlignMille2Module::kDOFDVR)>=0) SetGlobalDerivative(mod->GetParOffset(AliITSAlignMille2Module::kDOFDVR), -1.);
AddConstraint(fGlobalDerivatives, 0, 1e-12);
}
void AliITSAlignMille2::ProcessSDDPointInfo(const AliTrackPoint* pnt,Int_t sID, Int_t pntID)
{
fDriftTime0[pntID] = fIniRespSDD ? fIniRespSDD->GetTimeZero(sID) : 0.;
double tdif = pnt->GetDriftTime() - fDriftTime0[pntID];
if (tdif<0) tdif = 1;
double vdrift=0,vdrift0=0;
Bool_t sddSide = kFALSE;
int sID0 = 2*(sID-kSDDoffsID);
double zanode = -999;
if (fIniVDriftSDD) {
AliITSDriftSpeedArraySDD* drarr;
double vdR,vdL,xlR,xlL;
double xlabs = TMath::Abs(fMeasLoc[kX]);
drarr = (AliITSDriftSpeedArraySDD*)fIniVDriftSDD->At(sID0);
zanode = fSegmentationSDD->GetAnodeFromLocal(xlabs,fMeasLoc[kZ]);
vdL = drarr->GetDriftSpeed(0, zanode);
if (fIniRespSDD) {
double corr = fIniRespSDD->GetDeltaVDrift(sID, kFALSE);
if (fIniRespSDD->IsVDCorrMult()) vdL *= (1+corr);
else vdL += corr;
}
xlL = (fSegmentationSDD->Dx() - vdL*tdif)*1e-4;
drarr = (AliITSDriftSpeedArraySDD*)fIniVDriftSDD->At(sID0+1);
zanode = fSegmentationSDD->GetAnodeFromLocal(-xlabs,fMeasLoc[kZ]) - 256;
vdR = drarr->GetDriftSpeed(0, zanode);
if (fIniRespSDD) {
double corr = fIniRespSDD->GetDeltaVDrift(sID, kTRUE);
if (fIniRespSDD->IsVDCorrMult()) vdR *= (1+corr);
else vdR += corr;
}
xlR = -(fSegmentationSDD->Dx() - vdR*tdif)*1e-4;
if (TMath::Abs(xlL-fMeasLoc[kX])<TMath::Abs(xlR-fMeasLoc[kX])) {
sddSide = 0;
vdrift = vdL*1e-4;
}
else {
sddSide = 1;
vdrift = vdR*1e-4;
}
}
else {
vdrift = (fSegmentationSDD->Dx()*1e-4 - TMath::Abs(fMeasLoc[kX]))/tdif;
sddSide = fMeasLoc[kX]<0;
}
if (fPreVDriftSDD) {
zanode = fSegmentationSDD->GetAnodeFromLocal(0.5-sddSide,fMeasLoc[kZ]);
if (sddSide) zanode -= 256;
vdrift = ((AliITSDriftSpeedArraySDD*)fPreVDriftSDD->At(sID0+sddSide))->GetDriftSpeed(0, zanode)*1e-4;
}
if (vdrift<0) vdrift = 0;
vdrift0 = vdrift;
if (fPreRespSDD) {
float t0Upd = fPreRespSDD->GetTimeZero(sID);
double corr = fPreRespSDD->GetDeltaVDrift(sID, sddSide);
if (fPreRespSDD->IsVDCorrMult()) vdrift *= 1+corr;
else vdrift += corr*1e-4;
if (fIniVDriftSDD&&fIniRespSDD && (fPreVDriftSDD==0)) {
double corr1 = fIniRespSDD->GetDeltaVDrift(sID, sddSide);
if (fIniRespSDD->IsVDCorrMult()) vdrift *= (1-corr1);
else vdrift -= corr1*1e-4;
}
tdif = pnt->GetDriftTime() - t0Upd;
fMeasLoc[0] = fSegmentationSDD->Dx()*1e-4 - vdrift*tdif;
if (sddSide) fMeasLoc[0] = -fMeasLoc[0];
fDriftTime0[pntID] = t0Upd;
}
if (fPreCorrMapSDD) {
fMeasLoc[0] += fPreCorrMapSDD->GetCorrection(sID,fMeasLoc[2],fMeasLoc[0]);
}
fDriftSpeed[pntID] = sddSide ? -vdrift : vdrift;
fDriftSpeed0[pntID] = sddSide ? -vdrift0 : vdrift0;
}
AliITSAlignMille2Module* AliITSAlignMille2::CreateVertexModule()
{
TGeoHMatrix mt;
AliITSAlignMille2Module* mod = new AliITSAlignMille2Module(kVtxSensID,kVtxSensVID,"VTX",&mt,0,0);
fMilleModule.AddAtAndExpand(mod,fNModules);
mod->SetGeomParamsGlobal(fUseGlobalDelta);
fDiamondModID = fNModules;
mod->SetUniqueID(fNModules++);
mod->SetNotInConf(kTRUE);
return mod;
}
AliCDBEntry* AliITSAlignMille2::GetCDBEntry(const char* path)
{
AliCDBEntry *entry = 0;
AliInfo(Form("Loading object %s",path));
AliCDBManager* man = AliCDBManager::Instance();
AliCDBId* cdbId = AliCDBId::MakeFromString(path);
if (!cdbId) {
AliError("Failed to create cdbId");
return 0;
}
AliCDBStorage* stor = man->GetDefaultStorage();
if (!stor && !man->GetRaw()) man->SetDefaultStorage("raw://");
if (man->GetRaw()) man->SetRun(fRunID>0 ? fRunID : cdbId->GetFirstRun());
if (stor) {
TString tp = stor->GetType();
if (tp.Contains("alien",TString::kIgnoreCase) && !gGrid) TGrid::Connect("alien:");
}
entry = man->Get(cdbId->GetPath(),cdbId->GetFirstRun(),cdbId->GetVersion(),cdbId->GetSubVersion());
man->ClearCache();
delete cdbId;
return entry;
}
void AliITSAlignMille2::SetVertexConstraint(const AliESDVertex* vtx)
{
if (!vtx) return;
double cmat[6];
float cmatF[6];
vtx->GetCovMatrix(cmat);
AliITSAlignMille2Module* diamMod = GetMilleModuleByVID(kVtxSensVID);
if (diamMod) {
cmat[0] *= diamMod->GetSigmaXFactor()*diamMod->GetSigmaXFactor();
cmat[2] *= diamMod->GetSigmaYFactor()*diamMod->GetSigmaYFactor();
cmat[5] *= diamMod->GetSigmaZFactor()*diamMod->GetSigmaZFactor();
cmat[1] *= diamMod->GetSigmaXFactor()*diamMod->GetSigmaYFactor();
cmat[3] *= diamMod->GetSigmaXFactor()*diamMod->GetSigmaZFactor();
cmat[4] *= diamMod->GetSigmaYFactor()*diamMod->GetSigmaZFactor();
}
cmatF[0] = cmat[0];
cmatF[1] = cmat[1];
cmatF[2] = cmat[3];
cmatF[3] = cmat[2];
cmatF[4] = cmat[4];
cmatF[5] = cmat[5];
fDiamond.SetXYZ(vtx->GetX(),vtx->GetY(),vtx->GetZ(), cmatF);
Double_t t0 = cmat[2]*cmat[5] - cmat[4]*cmat[4];
Double_t t1 = cmat[1]*cmat[5] - cmat[3]*cmat[4];
Double_t t2 = cmat[1]*cmat[4] - cmat[2]*cmat[3];
Double_t det = cmat[0]*t0 - cmat[1]*t1 + cmat[3]*t2;
if (TMath::Abs(det)<1e-36) {
vtx->Print();
AliFatal("Vertex constraint cov.matrix is singular");
}
cmatF[0] = t0/det;
cmatF[1] = -t1/det;
cmatF[2] = t2/det;
cmatF[3] = (cmat[0]*cmat[5] - cmat[3]*cmat[3])/det;
cmatF[4] = (cmat[1]*cmat[3] - cmat[0]*cmat[4])/det;
cmatF[5] = (cmat[0]*cmat[2] - cmat[1]*cmat[1])/det;
fDiamondI.SetXYZ(vtx->GetX(),vtx->GetY(),vtx->GetZ(), cmatF);
fVertexSet = kTRUE;
}
void AliITSAlignMille2::ConvertDeltas()
{
AliInfo("Converting deltas from initial to target geometry");
int nMatOld = fConvAlgMatOld.GetEntriesFast();
TClonesArray* deltArrNew = new TClonesArray("AliAlignObjParams",10);
TGeoHMatrix dmPar;
int nDelNew = 0;
for (int im=0;im<nMatOld;im++) {
TGeoHMatrix* mtGjold = (TGeoHMatrix*)fConvAlgMatOld[im];
TString algname = mtGjold->GetTitle();
UShort_t vID = AliITSAlignMille2Module::GetVolumeIDFromSymname(algname.Data());
TGeoHMatrix* parent = mtGjold;
TGeoHMatrix xNew;
int parID;
while ( (parID=parent->GetUniqueID()-1)>=0 ) {
parent = (TGeoHMatrix*)fConvAlgMatOld[parID];
AliAlignObjParams* deltaPar = ConvFindDelta(deltArrNew,parent->GetTitle());
if (deltaPar) deltaPar->GetMatrix(dmPar); xNew *= dmPar;
}
AliGeomManager::GetOrigGlobalMatrix(algname,dmPar);
xNew *= dmPar;
dmPar = *mtGjold;
dmPar *= xNew.Inverse();
new((*deltArrNew)[nDelNew++]) AliAlignObjParams(algname.Data(),vID,dmPar,kTRUE);
}
delete fPrealignment;
fPrealignment = deltArrNew;
fConvAlgMatOld.Delete();
}
void AliITSAlignMille2::ConvSortHierarchically(TObjArray& matArr)
{
int nmat = matArr.GetEntriesFast();
for (int i=0;i<nmat;i++) {
for (int j=i+1;j<nmat;j++) {
TGeoHMatrix* matI = (TGeoHMatrix*) matArr[i];
TGeoHMatrix* matJ = (TGeoHMatrix*) matArr[j];
if (ConvIsJParentOfI(matI,matJ)) {
matArr[i] = matJ;
matArr[j] = matI;
}
}
}
for (int i=nmat;i--;) {
TGeoHMatrix* matI = (TGeoHMatrix*) matArr[i];
matI->SetUniqueID(0);
for (int j=i;j--;) {
TGeoHMatrix* matJ = (TGeoHMatrix*) matArr[j];
if (ConvIsJParentOfI(matI,matJ)) { matI->SetUniqueID(j+1); break; }
}
}
}
Bool_t AliITSAlignMille2::ConvIsJParentOfI(const TGeoHMatrix* matI,const TGeoHMatrix* matJ) const
{
TString nmI = matI->GetTitle();
TString nmJ = matJ->GetTitle();
int nlrI = nmI.CountChar('/');
int nlrJ = nmJ.CountChar('/');
if (nlrJ>=nlrI) return kFALSE;
if (nmI.BeginsWith("ITS/SPD1") && nmJ.BeginsWith("ITS/SPD0") && nlrJ==2) nmJ.ReplaceAll("SPD0","SPD1");
return (nmI.BeginsWith(nmJ)) ? kTRUE:kFALSE;
}
AliAlignObjParams* AliITSAlignMille2::ConvFindDelta(const TClonesArray* arrDelta,const TString& algname) const
{
if (!arrDelta) return 0;
AliAlignObjParams* delta = 0;
int nDeltas = arrDelta->GetEntries();
for (int id=0;id<nDeltas;id++) {
delta = (AliAlignObjParams*)arrDelta->At(id);
if (algname==delta->GetSymName()) break;
delta = 0;
}
return delta;
}
AliITSAlignMille2.cxx:100 AliITSAlignMille2.cxx:101 AliITSAlignMille2.cxx:102 AliITSAlignMille2.cxx:103 AliITSAlignMille2.cxx:104 AliITSAlignMille2.cxx:105 AliITSAlignMille2.cxx:106 AliITSAlignMille2.cxx:107 AliITSAlignMille2.cxx:108 AliITSAlignMille2.cxx:109 AliITSAlignMille2.cxx:110 AliITSAlignMille2.cxx:111 AliITSAlignMille2.cxx:112 AliITSAlignMille2.cxx:113 AliITSAlignMille2.cxx:114 AliITSAlignMille2.cxx:115 AliITSAlignMille2.cxx:116 AliITSAlignMille2.cxx:117 AliITSAlignMille2.cxx:118 AliITSAlignMille2.cxx:119 AliITSAlignMille2.cxx:120 AliITSAlignMille2.cxx:121 AliITSAlignMille2.cxx:122 AliITSAlignMille2.cxx:123 AliITSAlignMille2.cxx:124 AliITSAlignMille2.cxx:125 AliITSAlignMille2.cxx:126 AliITSAlignMille2.cxx:127 AliITSAlignMille2.cxx:128 AliITSAlignMille2.cxx:129 AliITSAlignMille2.cxx:130 AliITSAlignMille2.cxx:131 AliITSAlignMille2.cxx:132 AliITSAlignMille2.cxx:133 AliITSAlignMille2.cxx:134 AliITSAlignMille2.cxx:135 AliITSAlignMille2.cxx:136 AliITSAlignMille2.cxx:137 AliITSAlignMille2.cxx:138 AliITSAlignMille2.cxx:139 AliITSAlignMille2.cxx:140 AliITSAlignMille2.cxx:141 AliITSAlignMille2.cxx:142 AliITSAlignMille2.cxx:143 AliITSAlignMille2.cxx:144 AliITSAlignMille2.cxx:145 AliITSAlignMille2.cxx:146 AliITSAlignMille2.cxx:147 AliITSAlignMille2.cxx:148 AliITSAlignMille2.cxx:149 AliITSAlignMille2.cxx:150 AliITSAlignMille2.cxx:151 AliITSAlignMille2.cxx:152 AliITSAlignMille2.cxx:153 AliITSAlignMille2.cxx:154 AliITSAlignMille2.cxx:155 AliITSAlignMille2.cxx:156 AliITSAlignMille2.cxx:157 AliITSAlignMille2.cxx:158 AliITSAlignMille2.cxx:159 AliITSAlignMille2.cxx:160 AliITSAlignMille2.cxx:161 AliITSAlignMille2.cxx:162 AliITSAlignMille2.cxx:163 AliITSAlignMille2.cxx:164 AliITSAlignMille2.cxx:165 AliITSAlignMille2.cxx:166 AliITSAlignMille2.cxx:167 AliITSAlignMille2.cxx:168 AliITSAlignMille2.cxx:169 AliITSAlignMille2.cxx:170 AliITSAlignMille2.cxx:171 AliITSAlignMille2.cxx:172 AliITSAlignMille2.cxx:173 AliITSAlignMille2.cxx:174 AliITSAlignMille2.cxx:175 AliITSAlignMille2.cxx:176 AliITSAlignMille2.cxx:177 AliITSAlignMille2.cxx:178 AliITSAlignMille2.cxx:179 AliITSAlignMille2.cxx:180 AliITSAlignMille2.cxx:181 AliITSAlignMille2.cxx:182 AliITSAlignMille2.cxx:183 AliITSAlignMille2.cxx:184 AliITSAlignMille2.cxx:185 AliITSAlignMille2.cxx:186 AliITSAlignMille2.cxx:187 AliITSAlignMille2.cxx:188 AliITSAlignMille2.cxx:189 AliITSAlignMille2.cxx:190 AliITSAlignMille2.cxx:191 AliITSAlignMille2.cxx:192 AliITSAlignMille2.cxx:193 AliITSAlignMille2.cxx:194 AliITSAlignMille2.cxx:195 AliITSAlignMille2.cxx:196 AliITSAlignMille2.cxx:197 AliITSAlignMille2.cxx:198 AliITSAlignMille2.cxx:199 AliITSAlignMille2.cxx:200 AliITSAlignMille2.cxx:201 AliITSAlignMille2.cxx:202 AliITSAlignMille2.cxx:203 AliITSAlignMille2.cxx:204 AliITSAlignMille2.cxx:205 AliITSAlignMille2.cxx:206 AliITSAlignMille2.cxx:207 AliITSAlignMille2.cxx:208 AliITSAlignMille2.cxx:209 AliITSAlignMille2.cxx:210 AliITSAlignMille2.cxx:211 AliITSAlignMille2.cxx:212 AliITSAlignMille2.cxx:213 AliITSAlignMille2.cxx:214 AliITSAlignMille2.cxx:215 AliITSAlignMille2.cxx:216 AliITSAlignMille2.cxx:217 AliITSAlignMille2.cxx:218 AliITSAlignMille2.cxx:219 AliITSAlignMille2.cxx:220 AliITSAlignMille2.cxx:221 AliITSAlignMille2.cxx:222 AliITSAlignMille2.cxx:223 AliITSAlignMille2.cxx:224 AliITSAlignMille2.cxx:225 AliITSAlignMille2.cxx:226 AliITSAlignMille2.cxx:227 AliITSAlignMille2.cxx:228 AliITSAlignMille2.cxx:229 AliITSAlignMille2.cxx:230 AliITSAlignMille2.cxx:231 AliITSAlignMille2.cxx:232 AliITSAlignMille2.cxx:233 AliITSAlignMille2.cxx:234 AliITSAlignMille2.cxx:235 AliITSAlignMille2.cxx:236 AliITSAlignMille2.cxx:237 AliITSAlignMille2.cxx:238 AliITSAlignMille2.cxx:239 AliITSAlignMille2.cxx:240 AliITSAlignMille2.cxx:241 AliITSAlignMille2.cxx:242 AliITSAlignMille2.cxx:243 AliITSAlignMille2.cxx:244 AliITSAlignMille2.cxx:245 AliITSAlignMille2.cxx:246 AliITSAlignMille2.cxx:247 AliITSAlignMille2.cxx:248 AliITSAlignMille2.cxx:249 AliITSAlignMille2.cxx:250 AliITSAlignMille2.cxx:251 AliITSAlignMille2.cxx:252 AliITSAlignMille2.cxx:253 AliITSAlignMille2.cxx:254 AliITSAlignMille2.cxx:255 AliITSAlignMille2.cxx:256 AliITSAlignMille2.cxx:257 AliITSAlignMille2.cxx:258 AliITSAlignMille2.cxx:259 AliITSAlignMille2.cxx:260 AliITSAlignMille2.cxx:261 AliITSAlignMille2.cxx:262 AliITSAlignMille2.cxx:263 AliITSAlignMille2.cxx:264 AliITSAlignMille2.cxx:265 AliITSAlignMille2.cxx:266 AliITSAlignMille2.cxx:267 AliITSAlignMille2.cxx:268 AliITSAlignMille2.cxx:269 AliITSAlignMille2.cxx:270 AliITSAlignMille2.cxx:271 AliITSAlignMille2.cxx:272 AliITSAlignMille2.cxx:273 AliITSAlignMille2.cxx:274 AliITSAlignMille2.cxx:275 AliITSAlignMille2.cxx:276 AliITSAlignMille2.cxx:277 AliITSAlignMille2.cxx:278 AliITSAlignMille2.cxx:279 AliITSAlignMille2.cxx:280 AliITSAlignMille2.cxx:281 AliITSAlignMille2.cxx:282 AliITSAlignMille2.cxx:283 AliITSAlignMille2.cxx:284 AliITSAlignMille2.cxx:285 AliITSAlignMille2.cxx:286 AliITSAlignMille2.cxx:287 AliITSAlignMille2.cxx:288 AliITSAlignMille2.cxx:289 AliITSAlignMille2.cxx:290 AliITSAlignMille2.cxx:291 AliITSAlignMille2.cxx:292 AliITSAlignMille2.cxx:293 AliITSAlignMille2.cxx:294 AliITSAlignMille2.cxx:295 AliITSAlignMille2.cxx:296 AliITSAlignMille2.cxx:297 AliITSAlignMille2.cxx:298 AliITSAlignMille2.cxx:299 AliITSAlignMille2.cxx:300 AliITSAlignMille2.cxx:301 AliITSAlignMille2.cxx:302 AliITSAlignMille2.cxx:303 AliITSAlignMille2.cxx:304 AliITSAlignMille2.cxx:305 AliITSAlignMille2.cxx:306 AliITSAlignMille2.cxx:307 AliITSAlignMille2.cxx:308 AliITSAlignMille2.cxx:309 AliITSAlignMille2.cxx:310 AliITSAlignMille2.cxx:311 AliITSAlignMille2.cxx:312 AliITSAlignMille2.cxx:313 AliITSAlignMille2.cxx:314 AliITSAlignMille2.cxx:315 AliITSAlignMille2.cxx:316 AliITSAlignMille2.cxx:317 AliITSAlignMille2.cxx:318 AliITSAlignMille2.cxx:319 AliITSAlignMille2.cxx:320 AliITSAlignMille2.cxx:321 AliITSAlignMille2.cxx:322 AliITSAlignMille2.cxx:323 AliITSAlignMille2.cxx:324 AliITSAlignMille2.cxx:325 AliITSAlignMille2.cxx:326 AliITSAlignMille2.cxx:327 AliITSAlignMille2.cxx:328 AliITSAlignMille2.cxx:329 AliITSAlignMille2.cxx:330 AliITSAlignMille2.cxx:331 AliITSAlignMille2.cxx:332 AliITSAlignMille2.cxx:333 AliITSAlignMille2.cxx:334 AliITSAlignMille2.cxx:335 AliITSAlignMille2.cxx:336 AliITSAlignMille2.cxx:337 AliITSAlignMille2.cxx:338 AliITSAlignMille2.cxx:339 AliITSAlignMille2.cxx:340 AliITSAlignMille2.cxx:341 AliITSAlignMille2.cxx:342 AliITSAlignMille2.cxx:343 AliITSAlignMille2.cxx:344 AliITSAlignMille2.cxx:345 AliITSAlignMille2.cxx:346 AliITSAlignMille2.cxx:347 AliITSAlignMille2.cxx:348 AliITSAlignMille2.cxx:349 AliITSAlignMille2.cxx:350 AliITSAlignMille2.cxx:351 AliITSAlignMille2.cxx:352 AliITSAlignMille2.cxx:353 AliITSAlignMille2.cxx:354 AliITSAlignMille2.cxx:355 AliITSAlignMille2.cxx:356 AliITSAlignMille2.cxx:357 AliITSAlignMille2.cxx:358 AliITSAlignMille2.cxx:359 AliITSAlignMille2.cxx:360 AliITSAlignMille2.cxx:361 AliITSAlignMille2.cxx:362 AliITSAlignMille2.cxx:363 AliITSAlignMille2.cxx:364 AliITSAlignMille2.cxx:365 AliITSAlignMille2.cxx:366 AliITSAlignMille2.cxx:367 AliITSAlignMille2.cxx:368 AliITSAlignMille2.cxx:369 AliITSAlignMille2.cxx:370 AliITSAlignMille2.cxx:371 AliITSAlignMille2.cxx:372 AliITSAlignMille2.cxx:373 AliITSAlignMille2.cxx:374 AliITSAlignMille2.cxx:375 AliITSAlignMille2.cxx:376 AliITSAlignMille2.cxx:377 AliITSAlignMille2.cxx:378 AliITSAlignMille2.cxx:379 AliITSAlignMille2.cxx:380 AliITSAlignMille2.cxx:381 AliITSAlignMille2.cxx:382 AliITSAlignMille2.cxx:383 AliITSAlignMille2.cxx:384 AliITSAlignMille2.cxx:385 AliITSAlignMille2.cxx:386 AliITSAlignMille2.cxx:387 AliITSAlignMille2.cxx:388 AliITSAlignMille2.cxx:389 AliITSAlignMille2.cxx:390 AliITSAlignMille2.cxx:391 AliITSAlignMille2.cxx:392 AliITSAlignMille2.cxx:393 AliITSAlignMille2.cxx:394 AliITSAlignMille2.cxx:395 AliITSAlignMille2.cxx:396 AliITSAlignMille2.cxx:397 AliITSAlignMille2.cxx:398 AliITSAlignMille2.cxx:399 AliITSAlignMille2.cxx:400 AliITSAlignMille2.cxx:401 AliITSAlignMille2.cxx:402 AliITSAlignMille2.cxx:403 AliITSAlignMille2.cxx:404 AliITSAlignMille2.cxx:405 AliITSAlignMille2.cxx:406 AliITSAlignMille2.cxx:407 AliITSAlignMille2.cxx:408 AliITSAlignMille2.cxx:409 AliITSAlignMille2.cxx:410 AliITSAlignMille2.cxx:411 AliITSAlignMille2.cxx:412 AliITSAlignMille2.cxx:413 AliITSAlignMille2.cxx:414 AliITSAlignMille2.cxx:415 AliITSAlignMille2.cxx:416 AliITSAlignMille2.cxx:417 AliITSAlignMille2.cxx:418 AliITSAlignMille2.cxx:419 AliITSAlignMille2.cxx:420 AliITSAlignMille2.cxx:421 AliITSAlignMille2.cxx:422 AliITSAlignMille2.cxx:423 AliITSAlignMille2.cxx:424 AliITSAlignMille2.cxx:425 AliITSAlignMille2.cxx:426 AliITSAlignMille2.cxx:427 AliITSAlignMille2.cxx:428 AliITSAlignMille2.cxx:429 AliITSAlignMille2.cxx:430 AliITSAlignMille2.cxx:431 AliITSAlignMille2.cxx:432 AliITSAlignMille2.cxx:433 AliITSAlignMille2.cxx:434 AliITSAlignMille2.cxx:435 AliITSAlignMille2.cxx:436 AliITSAlignMille2.cxx:437 AliITSAlignMille2.cxx:438 AliITSAlignMille2.cxx:439 AliITSAlignMille2.cxx:440 AliITSAlignMille2.cxx:441 AliITSAlignMille2.cxx:442 AliITSAlignMille2.cxx:443 AliITSAlignMille2.cxx:444 AliITSAlignMille2.cxx:445 AliITSAlignMille2.cxx:446 AliITSAlignMille2.cxx:447 AliITSAlignMille2.cxx:448 AliITSAlignMille2.cxx:449 AliITSAlignMille2.cxx:450 AliITSAlignMille2.cxx:451 AliITSAlignMille2.cxx:452 AliITSAlignMille2.cxx:453 AliITSAlignMille2.cxx:454 AliITSAlignMille2.cxx:455 AliITSAlignMille2.cxx:456 AliITSAlignMille2.cxx:457 AliITSAlignMille2.cxx:458 AliITSAlignMille2.cxx:459 AliITSAlignMille2.cxx:460 AliITSAlignMille2.cxx:461 AliITSAlignMille2.cxx:462 AliITSAlignMille2.cxx:463 AliITSAlignMille2.cxx:464 AliITSAlignMille2.cxx:465 AliITSAlignMille2.cxx:466 AliITSAlignMille2.cxx:467 AliITSAlignMille2.cxx:468 AliITSAlignMille2.cxx:469 AliITSAlignMille2.cxx:470 AliITSAlignMille2.cxx:471 AliITSAlignMille2.cxx:472 AliITSAlignMille2.cxx:473 AliITSAlignMille2.cxx:474 AliITSAlignMille2.cxx:475 AliITSAlignMille2.cxx:476 AliITSAlignMille2.cxx:477 AliITSAlignMille2.cxx:478 AliITSAlignMille2.cxx:479 AliITSAlignMille2.cxx:480 AliITSAlignMille2.cxx:481 AliITSAlignMille2.cxx:482 AliITSAlignMille2.cxx:483 AliITSAlignMille2.cxx:484 AliITSAlignMille2.cxx:485 AliITSAlignMille2.cxx:486 AliITSAlignMille2.cxx:487 AliITSAlignMille2.cxx:488 AliITSAlignMille2.cxx:489 AliITSAlignMille2.cxx:490 AliITSAlignMille2.cxx:491 AliITSAlignMille2.cxx:492 AliITSAlignMille2.cxx:493 AliITSAlignMille2.cxx:494 AliITSAlignMille2.cxx:495 AliITSAlignMille2.cxx:496 AliITSAlignMille2.cxx:497 AliITSAlignMille2.cxx:498 AliITSAlignMille2.cxx:499 AliITSAlignMille2.cxx:500 AliITSAlignMille2.cxx:501 AliITSAlignMille2.cxx:502 AliITSAlignMille2.cxx:503 AliITSAlignMille2.cxx:504 AliITSAlignMille2.cxx:505 AliITSAlignMille2.cxx:506 AliITSAlignMille2.cxx:507 AliITSAlignMille2.cxx:508 AliITSAlignMille2.cxx:509 AliITSAlignMille2.cxx:510 AliITSAlignMille2.cxx:511 AliITSAlignMille2.cxx:512 AliITSAlignMille2.cxx:513 AliITSAlignMille2.cxx:514 AliITSAlignMille2.cxx:515 AliITSAlignMille2.cxx:516 AliITSAlignMille2.cxx:517 AliITSAlignMille2.cxx:518 AliITSAlignMille2.cxx:519 AliITSAlignMille2.cxx:520 AliITSAlignMille2.cxx:521 AliITSAlignMille2.cxx:522 AliITSAlignMille2.cxx:523 AliITSAlignMille2.cxx:524 AliITSAlignMille2.cxx:525 AliITSAlignMille2.cxx:526 AliITSAlignMille2.cxx:527 AliITSAlignMille2.cxx:528 AliITSAlignMille2.cxx:529 AliITSAlignMille2.cxx:530 AliITSAlignMille2.cxx:531 AliITSAlignMille2.cxx:532 AliITSAlignMille2.cxx:533 AliITSAlignMille2.cxx:534 AliITSAlignMille2.cxx:535 AliITSAlignMille2.cxx:536 AliITSAlignMille2.cxx:537 AliITSAlignMille2.cxx:538 AliITSAlignMille2.cxx:539 AliITSAlignMille2.cxx:540 AliITSAlignMille2.cxx:541 AliITSAlignMille2.cxx:542 AliITSAlignMille2.cxx:543 AliITSAlignMille2.cxx:544 AliITSAlignMille2.cxx:545 AliITSAlignMille2.cxx:546 AliITSAlignMille2.cxx:547 AliITSAlignMille2.cxx:548 AliITSAlignMille2.cxx:549 AliITSAlignMille2.cxx:550 AliITSAlignMille2.cxx:551 AliITSAlignMille2.cxx:552 AliITSAlignMille2.cxx:553 AliITSAlignMille2.cxx:554 AliITSAlignMille2.cxx:555 AliITSAlignMille2.cxx:556 AliITSAlignMille2.cxx:557 AliITSAlignMille2.cxx:558 AliITSAlignMille2.cxx:559 AliITSAlignMille2.cxx:560 AliITSAlignMille2.cxx:561 AliITSAlignMille2.cxx:562 AliITSAlignMille2.cxx:563 AliITSAlignMille2.cxx:564 AliITSAlignMille2.cxx:565 AliITSAlignMille2.cxx:566 AliITSAlignMille2.cxx:567 AliITSAlignMille2.cxx:568 AliITSAlignMille2.cxx:569 AliITSAlignMille2.cxx:570 AliITSAlignMille2.cxx:571 AliITSAlignMille2.cxx:572 AliITSAlignMille2.cxx:573 AliITSAlignMille2.cxx:574 AliITSAlignMille2.cxx:575 AliITSAlignMille2.cxx:576 AliITSAlignMille2.cxx:577 AliITSAlignMille2.cxx:578 AliITSAlignMille2.cxx:579 AliITSAlignMille2.cxx:580 AliITSAlignMille2.cxx:581 AliITSAlignMille2.cxx:582 AliITSAlignMille2.cxx:583 AliITSAlignMille2.cxx:584 AliITSAlignMille2.cxx:585 AliITSAlignMille2.cxx:586 AliITSAlignMille2.cxx:587 AliITSAlignMille2.cxx:588 AliITSAlignMille2.cxx:589 AliITSAlignMille2.cxx:590 AliITSAlignMille2.cxx:591 AliITSAlignMille2.cxx:592 AliITSAlignMille2.cxx:593 AliITSAlignMille2.cxx:594 AliITSAlignMille2.cxx:595 AliITSAlignMille2.cxx:596 AliITSAlignMille2.cxx:597 AliITSAlignMille2.cxx:598 AliITSAlignMille2.cxx:599 AliITSAlignMille2.cxx:600 AliITSAlignMille2.cxx:601 AliITSAlignMille2.cxx:602 AliITSAlignMille2.cxx:603 AliITSAlignMille2.cxx:604 AliITSAlignMille2.cxx:605 AliITSAlignMille2.cxx:606 AliITSAlignMille2.cxx:607 AliITSAlignMille2.cxx:608 AliITSAlignMille2.cxx:609 AliITSAlignMille2.cxx:610 AliITSAlignMille2.cxx:611 AliITSAlignMille2.cxx:612 AliITSAlignMille2.cxx:613 AliITSAlignMille2.cxx:614 AliITSAlignMille2.cxx:615 AliITSAlignMille2.cxx:616 AliITSAlignMille2.cxx:617 AliITSAlignMille2.cxx:618 AliITSAlignMille2.cxx:619 AliITSAlignMille2.cxx:620 AliITSAlignMille2.cxx:621 AliITSAlignMille2.cxx:622 AliITSAlignMille2.cxx:623 AliITSAlignMille2.cxx:624 AliITSAlignMille2.cxx:625 AliITSAlignMille2.cxx:626 AliITSAlignMille2.cxx:627 AliITSAlignMille2.cxx:628 AliITSAlignMille2.cxx:629 AliITSAlignMille2.cxx:630 AliITSAlignMille2.cxx:631 AliITSAlignMille2.cxx:632 AliITSAlignMille2.cxx:633 AliITSAlignMille2.cxx:634 AliITSAlignMille2.cxx:635 AliITSAlignMille2.cxx:636 AliITSAlignMille2.cxx:637 AliITSAlignMille2.cxx:638 AliITSAlignMille2.cxx:639 AliITSAlignMille2.cxx:640 AliITSAlignMille2.cxx:641 AliITSAlignMille2.cxx:642 AliITSAlignMille2.cxx:643 AliITSAlignMille2.cxx:644 AliITSAlignMille2.cxx:645 AliITSAlignMille2.cxx:646 AliITSAlignMille2.cxx:647 AliITSAlignMille2.cxx:648 AliITSAlignMille2.cxx:649 AliITSAlignMille2.cxx:650 AliITSAlignMille2.cxx:651 AliITSAlignMille2.cxx:652 AliITSAlignMille2.cxx:653 AliITSAlignMille2.cxx:654 AliITSAlignMille2.cxx:655 AliITSAlignMille2.cxx:656 AliITSAlignMille2.cxx:657 AliITSAlignMille2.cxx:658 AliITSAlignMille2.cxx:659 AliITSAlignMille2.cxx:660 AliITSAlignMille2.cxx:661 AliITSAlignMille2.cxx:662 AliITSAlignMille2.cxx:663 AliITSAlignMille2.cxx:664 AliITSAlignMille2.cxx:665 AliITSAlignMille2.cxx:666 AliITSAlignMille2.cxx:667 AliITSAlignMille2.cxx:668 AliITSAlignMille2.cxx:669 AliITSAlignMille2.cxx:670 AliITSAlignMille2.cxx:671 AliITSAlignMille2.cxx:672 AliITSAlignMille2.cxx:673 AliITSAlignMille2.cxx:674 AliITSAlignMille2.cxx:675 AliITSAlignMille2.cxx:676 AliITSAlignMille2.cxx:677 AliITSAlignMille2.cxx:678 AliITSAlignMille2.cxx:679 AliITSAlignMille2.cxx:680 AliITSAlignMille2.cxx:681 AliITSAlignMille2.cxx:682 AliITSAlignMille2.cxx:683 AliITSAlignMille2.cxx:684 AliITSAlignMille2.cxx:685 AliITSAlignMille2.cxx:686 AliITSAlignMille2.cxx:687 AliITSAlignMille2.cxx:688 AliITSAlignMille2.cxx:689 AliITSAlignMille2.cxx:690 AliITSAlignMille2.cxx:691 AliITSAlignMille2.cxx:692 AliITSAlignMille2.cxx:693 AliITSAlignMille2.cxx:694 AliITSAlignMille2.cxx:695 AliITSAlignMille2.cxx:696 AliITSAlignMille2.cxx:697 AliITSAlignMille2.cxx:698 AliITSAlignMille2.cxx:699 AliITSAlignMille2.cxx:700 AliITSAlignMille2.cxx:701 AliITSAlignMille2.cxx:702 AliITSAlignMille2.cxx:703 AliITSAlignMille2.cxx:704 AliITSAlignMille2.cxx:705 AliITSAlignMille2.cxx:706 AliITSAlignMille2.cxx:707 AliITSAlignMille2.cxx:708 AliITSAlignMille2.cxx:709 AliITSAlignMille2.cxx:710 AliITSAlignMille2.cxx:711 AliITSAlignMille2.cxx:712 AliITSAlignMille2.cxx:713 AliITSAlignMille2.cxx:714 AliITSAlignMille2.cxx:715 AliITSAlignMille2.cxx:716 AliITSAlignMille2.cxx:717 AliITSAlignMille2.cxx:718 AliITSAlignMille2.cxx:719 AliITSAlignMille2.cxx:720 AliITSAlignMille2.cxx:721 AliITSAlignMille2.cxx:722 AliITSAlignMille2.cxx:723 AliITSAlignMille2.cxx:724 AliITSAlignMille2.cxx:725 AliITSAlignMille2.cxx:726 AliITSAlignMille2.cxx:727 AliITSAlignMille2.cxx:728 AliITSAlignMille2.cxx:729 AliITSAlignMille2.cxx:730 AliITSAlignMille2.cxx:731 AliITSAlignMille2.cxx:732 AliITSAlignMille2.cxx:733 AliITSAlignMille2.cxx:734 AliITSAlignMille2.cxx:735 AliITSAlignMille2.cxx:736 AliITSAlignMille2.cxx:737 AliITSAlignMille2.cxx:738 AliITSAlignMille2.cxx:739 AliITSAlignMille2.cxx:740 AliITSAlignMille2.cxx:741 AliITSAlignMille2.cxx:742 AliITSAlignMille2.cxx:743 AliITSAlignMille2.cxx:744 AliITSAlignMille2.cxx:745 AliITSAlignMille2.cxx:746 AliITSAlignMille2.cxx:747 AliITSAlignMille2.cxx:748 AliITSAlignMille2.cxx:749 AliITSAlignMille2.cxx:750 AliITSAlignMille2.cxx:751 AliITSAlignMille2.cxx:752 AliITSAlignMille2.cxx:753 AliITSAlignMille2.cxx:754 AliITSAlignMille2.cxx:755 AliITSAlignMille2.cxx:756 AliITSAlignMille2.cxx:757 AliITSAlignMille2.cxx:758 AliITSAlignMille2.cxx:759 AliITSAlignMille2.cxx:760 AliITSAlignMille2.cxx:761 AliITSAlignMille2.cxx:762 AliITSAlignMille2.cxx:763 AliITSAlignMille2.cxx:764 AliITSAlignMille2.cxx:765 AliITSAlignMille2.cxx:766 AliITSAlignMille2.cxx:767 AliITSAlignMille2.cxx:768 AliITSAlignMille2.cxx:769 AliITSAlignMille2.cxx:770 AliITSAlignMille2.cxx:771 AliITSAlignMille2.cxx:772 AliITSAlignMille2.cxx:773 AliITSAlignMille2.cxx:774 AliITSAlignMille2.cxx:775 AliITSAlignMille2.cxx:776 AliITSAlignMille2.cxx:777 AliITSAlignMille2.cxx:778 AliITSAlignMille2.cxx:779 AliITSAlignMille2.cxx:780 AliITSAlignMille2.cxx:781 AliITSAlignMille2.cxx:782 AliITSAlignMille2.cxx:783 AliITSAlignMille2.cxx:784 AliITSAlignMille2.cxx:785 AliITSAlignMille2.cxx:786 AliITSAlignMille2.cxx:787 AliITSAlignMille2.cxx:788 AliITSAlignMille2.cxx:789 AliITSAlignMille2.cxx:790 AliITSAlignMille2.cxx:791 AliITSAlignMille2.cxx:792 AliITSAlignMille2.cxx:793 AliITSAlignMille2.cxx:794 AliITSAlignMille2.cxx:795 AliITSAlignMille2.cxx:796 AliITSAlignMille2.cxx:797 AliITSAlignMille2.cxx:798 AliITSAlignMille2.cxx:799 AliITSAlignMille2.cxx:800 AliITSAlignMille2.cxx:801 AliITSAlignMille2.cxx:802 AliITSAlignMille2.cxx:803 AliITSAlignMille2.cxx:804 AliITSAlignMille2.cxx:805 AliITSAlignMille2.cxx:806 AliITSAlignMille2.cxx:807 AliITSAlignMille2.cxx:808 AliITSAlignMille2.cxx:809 AliITSAlignMille2.cxx:810 AliITSAlignMille2.cxx:811 AliITSAlignMille2.cxx:812 AliITSAlignMille2.cxx:813 AliITSAlignMille2.cxx:814 AliITSAlignMille2.cxx:815 AliITSAlignMille2.cxx:816 AliITSAlignMille2.cxx:817 AliITSAlignMille2.cxx:818 AliITSAlignMille2.cxx:819 AliITSAlignMille2.cxx:820 AliITSAlignMille2.cxx:821 AliITSAlignMille2.cxx:822 AliITSAlignMille2.cxx:823 AliITSAlignMille2.cxx:824 AliITSAlignMille2.cxx:825 AliITSAlignMille2.cxx:826 AliITSAlignMille2.cxx:827 AliITSAlignMille2.cxx:828 AliITSAlignMille2.cxx:829 AliITSAlignMille2.cxx:830 AliITSAlignMille2.cxx:831 AliITSAlignMille2.cxx:832 AliITSAlignMille2.cxx:833 AliITSAlignMille2.cxx:834 AliITSAlignMille2.cxx:835 AliITSAlignMille2.cxx:836 AliITSAlignMille2.cxx:837 AliITSAlignMille2.cxx:838 AliITSAlignMille2.cxx:839 AliITSAlignMille2.cxx:840 AliITSAlignMille2.cxx:841 AliITSAlignMille2.cxx:842 AliITSAlignMille2.cxx:843 AliITSAlignMille2.cxx:844 AliITSAlignMille2.cxx:845 AliITSAlignMille2.cxx:846 AliITSAlignMille2.cxx:847 AliITSAlignMille2.cxx:848 AliITSAlignMille2.cxx:849 AliITSAlignMille2.cxx:850 AliITSAlignMille2.cxx:851 AliITSAlignMille2.cxx:852 AliITSAlignMille2.cxx:853 AliITSAlignMille2.cxx:854 AliITSAlignMille2.cxx:855 AliITSAlignMille2.cxx:856 AliITSAlignMille2.cxx:857 AliITSAlignMille2.cxx:858 AliITSAlignMille2.cxx:859 AliITSAlignMille2.cxx:860 AliITSAlignMille2.cxx:861 AliITSAlignMille2.cxx:862 AliITSAlignMille2.cxx:863 AliITSAlignMille2.cxx:864 AliITSAlignMille2.cxx:865 AliITSAlignMille2.cxx:866 AliITSAlignMille2.cxx:867 AliITSAlignMille2.cxx:868 AliITSAlignMille2.cxx:869 AliITSAlignMille2.cxx:870 AliITSAlignMille2.cxx:871 AliITSAlignMille2.cxx:872 AliITSAlignMille2.cxx:873 AliITSAlignMille2.cxx:874 AliITSAlignMille2.cxx:875 AliITSAlignMille2.cxx:876 AliITSAlignMille2.cxx:877 AliITSAlignMille2.cxx:878 AliITSAlignMille2.cxx:879 AliITSAlignMille2.cxx:880 AliITSAlignMille2.cxx:881 AliITSAlignMille2.cxx:882 AliITSAlignMille2.cxx:883 AliITSAlignMille2.cxx:884 AliITSAlignMille2.cxx:885 AliITSAlignMille2.cxx:886 AliITSAlignMille2.cxx:887 AliITSAlignMille2.cxx:888 AliITSAlignMille2.cxx:889 AliITSAlignMille2.cxx:890 AliITSAlignMille2.cxx:891 AliITSAlignMille2.cxx:892 AliITSAlignMille2.cxx:893 AliITSAlignMille2.cxx:894 AliITSAlignMille2.cxx:895 AliITSAlignMille2.cxx:896 AliITSAlignMille2.cxx:897 AliITSAlignMille2.cxx:898 AliITSAlignMille2.cxx:899 AliITSAlignMille2.cxx:900 AliITSAlignMille2.cxx:901 AliITSAlignMille2.cxx:902 AliITSAlignMille2.cxx:903 AliITSAlignMille2.cxx:904 AliITSAlignMille2.cxx:905 AliITSAlignMille2.cxx:906 AliITSAlignMille2.cxx:907 AliITSAlignMille2.cxx:908 AliITSAlignMille2.cxx:909 AliITSAlignMille2.cxx:910 AliITSAlignMille2.cxx:911 AliITSAlignMille2.cxx:912 AliITSAlignMille2.cxx:913 AliITSAlignMille2.cxx:914 AliITSAlignMille2.cxx:915 AliITSAlignMille2.cxx:916 AliITSAlignMille2.cxx:917 AliITSAlignMille2.cxx:918 AliITSAlignMille2.cxx:919 AliITSAlignMille2.cxx:920 AliITSAlignMille2.cxx:921 AliITSAlignMille2.cxx:922 AliITSAlignMille2.cxx:923 AliITSAlignMille2.cxx:924 AliITSAlignMille2.cxx:925 AliITSAlignMille2.cxx:926 AliITSAlignMille2.cxx:927 AliITSAlignMille2.cxx:928 AliITSAlignMille2.cxx:929 AliITSAlignMille2.cxx:930 AliITSAlignMille2.cxx:931 AliITSAlignMille2.cxx:932 AliITSAlignMille2.cxx:933 AliITSAlignMille2.cxx:934 AliITSAlignMille2.cxx:935 AliITSAlignMille2.cxx:936 AliITSAlignMille2.cxx:937 AliITSAlignMille2.cxx:938 AliITSAlignMille2.cxx:939 AliITSAlignMille2.cxx:940 AliITSAlignMille2.cxx:941 AliITSAlignMille2.cxx:942 AliITSAlignMille2.cxx:943 AliITSAlignMille2.cxx:944 AliITSAlignMille2.cxx:945 AliITSAlignMille2.cxx:946 AliITSAlignMille2.cxx:947 AliITSAlignMille2.cxx:948 AliITSAlignMille2.cxx:949 AliITSAlignMille2.cxx:950 AliITSAlignMille2.cxx:951 AliITSAlignMille2.cxx:952 AliITSAlignMille2.cxx:953 AliITSAlignMille2.cxx:954 AliITSAlignMille2.cxx:955 AliITSAlignMille2.cxx:956 AliITSAlignMille2.cxx:957 AliITSAlignMille2.cxx:958 AliITSAlignMille2.cxx:959 AliITSAlignMille2.cxx:960 AliITSAlignMille2.cxx:961 AliITSAlignMille2.cxx:962 AliITSAlignMille2.cxx:963 AliITSAlignMille2.cxx:964 AliITSAlignMille2.cxx:965 AliITSAlignMille2.cxx:966 AliITSAlignMille2.cxx:967 AliITSAlignMille2.cxx:968 AliITSAlignMille2.cxx:969 AliITSAlignMille2.cxx:970 AliITSAlignMille2.cxx:971 AliITSAlignMille2.cxx:972 AliITSAlignMille2.cxx:973 AliITSAlignMille2.cxx:974 AliITSAlignMille2.cxx:975 AliITSAlignMille2.cxx:976 AliITSAlignMille2.cxx:977 AliITSAlignMille2.cxx:978 AliITSAlignMille2.cxx:979 AliITSAlignMille2.cxx:980 AliITSAlignMille2.cxx:981 AliITSAlignMille2.cxx:982 AliITSAlignMille2.cxx:983 AliITSAlignMille2.cxx:984 AliITSAlignMille2.cxx:985 AliITSAlignMille2.cxx:986 AliITSAlignMille2.cxx:987 AliITSAlignMille2.cxx:988 AliITSAlignMille2.cxx:989 AliITSAlignMille2.cxx:990 AliITSAlignMille2.cxx:991 AliITSAlignMille2.cxx:992 AliITSAlignMille2.cxx:993 AliITSAlignMille2.cxx:994 AliITSAlignMille2.cxx:995 AliITSAlignMille2.cxx:996 AliITSAlignMille2.cxx:997 AliITSAlignMille2.cxx:998 AliITSAlignMille2.cxx:999 AliITSAlignMille2.cxx:1000 AliITSAlignMille2.cxx:1001 AliITSAlignMille2.cxx:1002 AliITSAlignMille2.cxx:1003 AliITSAlignMille2.cxx:1004 AliITSAlignMille2.cxx:1005 AliITSAlignMille2.cxx:1006 AliITSAlignMille2.cxx:1007 AliITSAlignMille2.cxx:1008 AliITSAlignMille2.cxx:1009 AliITSAlignMille2.cxx:1010 AliITSAlignMille2.cxx:1011 AliITSAlignMille2.cxx:1012 AliITSAlignMille2.cxx:1013 AliITSAlignMille2.cxx:1014 AliITSAlignMille2.cxx:1015 AliITSAlignMille2.cxx:1016 AliITSAlignMille2.cxx:1017 AliITSAlignMille2.cxx:1018 AliITSAlignMille2.cxx:1019 AliITSAlignMille2.cxx:1020 AliITSAlignMille2.cxx:1021 AliITSAlignMille2.cxx:1022 AliITSAlignMille2.cxx:1023 AliITSAlignMille2.cxx:1024 AliITSAlignMille2.cxx:1025 AliITSAlignMille2.cxx:1026 AliITSAlignMille2.cxx:1027 AliITSAlignMille2.cxx:1028 AliITSAlignMille2.cxx:1029 AliITSAlignMille2.cxx:1030 AliITSAlignMille2.cxx:1031 AliITSAlignMille2.cxx:1032 AliITSAlignMille2.cxx:1033 AliITSAlignMille2.cxx:1034 AliITSAlignMille2.cxx:1035 AliITSAlignMille2.cxx:1036 AliITSAlignMille2.cxx:1037 AliITSAlignMille2.cxx:1038 AliITSAlignMille2.cxx:1039 AliITSAlignMille2.cxx:1040 AliITSAlignMille2.cxx:1041 AliITSAlignMille2.cxx:1042 AliITSAlignMille2.cxx:1043 AliITSAlignMille2.cxx:1044 AliITSAlignMille2.cxx:1045 AliITSAlignMille2.cxx:1046 AliITSAlignMille2.cxx:1047 AliITSAlignMille2.cxx:1048 AliITSAlignMille2.cxx:1049 AliITSAlignMille2.cxx:1050 AliITSAlignMille2.cxx:1051 AliITSAlignMille2.cxx:1052 AliITSAlignMille2.cxx:1053 AliITSAlignMille2.cxx:1054 AliITSAlignMille2.cxx:1055 AliITSAlignMille2.cxx:1056 AliITSAlignMille2.cxx:1057 AliITSAlignMille2.cxx:1058 AliITSAlignMille2.cxx:1059 AliITSAlignMille2.cxx:1060 AliITSAlignMille2.cxx:1061 AliITSAlignMille2.cxx:1062 AliITSAlignMille2.cxx:1063 AliITSAlignMille2.cxx:1064 AliITSAlignMille2.cxx:1065 AliITSAlignMille2.cxx:1066 AliITSAlignMille2.cxx:1067 AliITSAlignMille2.cxx:1068 AliITSAlignMille2.cxx:1069 AliITSAlignMille2.cxx:1070 AliITSAlignMille2.cxx:1071 AliITSAlignMille2.cxx:1072 AliITSAlignMille2.cxx:1073 AliITSAlignMille2.cxx:1074 AliITSAlignMille2.cxx:1075 AliITSAlignMille2.cxx:1076 AliITSAlignMille2.cxx:1077 AliITSAlignMille2.cxx:1078 AliITSAlignMille2.cxx:1079 AliITSAlignMille2.cxx:1080 AliITSAlignMille2.cxx:1081 AliITSAlignMille2.cxx:1082 AliITSAlignMille2.cxx:1083 AliITSAlignMille2.cxx:1084 AliITSAlignMille2.cxx:1085 AliITSAlignMille2.cxx:1086 AliITSAlignMille2.cxx:1087 AliITSAlignMille2.cxx:1088 AliITSAlignMille2.cxx:1089 AliITSAlignMille2.cxx:1090 AliITSAlignMille2.cxx:1091 AliITSAlignMille2.cxx:1092 AliITSAlignMille2.cxx:1093 AliITSAlignMille2.cxx:1094 AliITSAlignMille2.cxx:1095 AliITSAlignMille2.cxx:1096 AliITSAlignMille2.cxx:1097 AliITSAlignMille2.cxx:1098 AliITSAlignMille2.cxx:1099 AliITSAlignMille2.cxx:1100 AliITSAlignMille2.cxx:1101 AliITSAlignMille2.cxx:1102 AliITSAlignMille2.cxx:1103 AliITSAlignMille2.cxx:1104 AliITSAlignMille2.cxx:1105 AliITSAlignMille2.cxx:1106 AliITSAlignMille2.cxx:1107 AliITSAlignMille2.cxx:1108 AliITSAlignMille2.cxx:1109 AliITSAlignMille2.cxx:1110 AliITSAlignMille2.cxx:1111 AliITSAlignMille2.cxx:1112 AliITSAlignMille2.cxx:1113 AliITSAlignMille2.cxx:1114 AliITSAlignMille2.cxx:1115 AliITSAlignMille2.cxx:1116 AliITSAlignMille2.cxx:1117 AliITSAlignMille2.cxx:1118 AliITSAlignMille2.cxx:1119 AliITSAlignMille2.cxx:1120 AliITSAlignMille2.cxx:1121 AliITSAlignMille2.cxx:1122 AliITSAlignMille2.cxx:1123 AliITSAlignMille2.cxx:1124 AliITSAlignMille2.cxx:1125 AliITSAlignMille2.cxx:1126 AliITSAlignMille2.cxx:1127 AliITSAlignMille2.cxx:1128 AliITSAlignMille2.cxx:1129 AliITSAlignMille2.cxx:1130 AliITSAlignMille2.cxx:1131 AliITSAlignMille2.cxx:1132 AliITSAlignMille2.cxx:1133 AliITSAlignMille2.cxx:1134 AliITSAlignMille2.cxx:1135 AliITSAlignMille2.cxx:1136 AliITSAlignMille2.cxx:1137 AliITSAlignMille2.cxx:1138 AliITSAlignMille2.cxx:1139 AliITSAlignMille2.cxx:1140 AliITSAlignMille2.cxx:1141 AliITSAlignMille2.cxx:1142 AliITSAlignMille2.cxx:1143 AliITSAlignMille2.cxx:1144 AliITSAlignMille2.cxx:1145 AliITSAlignMille2.cxx:1146 AliITSAlignMille2.cxx:1147 AliITSAlignMille2.cxx:1148 AliITSAlignMille2.cxx:1149 AliITSAlignMille2.cxx:1150 AliITSAlignMille2.cxx:1151 AliITSAlignMille2.cxx:1152 AliITSAlignMille2.cxx:1153 AliITSAlignMille2.cxx:1154 AliITSAlignMille2.cxx:1155 AliITSAlignMille2.cxx:1156 AliITSAlignMille2.cxx:1157 AliITSAlignMille2.cxx:1158 AliITSAlignMille2.cxx:1159 AliITSAlignMille2.cxx:1160 AliITSAlignMille2.cxx:1161 AliITSAlignMille2.cxx:1162 AliITSAlignMille2.cxx:1163 AliITSAlignMille2.cxx:1164 AliITSAlignMille2.cxx:1165 AliITSAlignMille2.cxx:1166 AliITSAlignMille2.cxx:1167 AliITSAlignMille2.cxx:1168 AliITSAlignMille2.cxx:1169 AliITSAlignMille2.cxx:1170 AliITSAlignMille2.cxx:1171 AliITSAlignMille2.cxx:1172 AliITSAlignMille2.cxx:1173 AliITSAlignMille2.cxx:1174 AliITSAlignMille2.cxx:1175 AliITSAlignMille2.cxx:1176 AliITSAlignMille2.cxx:1177 AliITSAlignMille2.cxx:1178 AliITSAlignMille2.cxx:1179 AliITSAlignMille2.cxx:1180 AliITSAlignMille2.cxx:1181 AliITSAlignMille2.cxx:1182 AliITSAlignMille2.cxx:1183 AliITSAlignMille2.cxx:1184 AliITSAlignMille2.cxx:1185 AliITSAlignMille2.cxx:1186 AliITSAlignMille2.cxx:1187 AliITSAlignMille2.cxx:1188 AliITSAlignMille2.cxx:1189 AliITSAlignMille2.cxx:1190 AliITSAlignMille2.cxx:1191 AliITSAlignMille2.cxx:1192 AliITSAlignMille2.cxx:1193 AliITSAlignMille2.cxx:1194 AliITSAlignMille2.cxx:1195 AliITSAlignMille2.cxx:1196 AliITSAlignMille2.cxx:1197 AliITSAlignMille2.cxx:1198 AliITSAlignMille2.cxx:1199 AliITSAlignMille2.cxx:1200 AliITSAlignMille2.cxx:1201 AliITSAlignMille2.cxx:1202 AliITSAlignMille2.cxx:1203 AliITSAlignMille2.cxx:1204 AliITSAlignMille2.cxx:1205 AliITSAlignMille2.cxx:1206 AliITSAlignMille2.cxx:1207 AliITSAlignMille2.cxx:1208 AliITSAlignMille2.cxx:1209 AliITSAlignMille2.cxx:1210 AliITSAlignMille2.cxx:1211 AliITSAlignMille2.cxx:1212 AliITSAlignMille2.cxx:1213 AliITSAlignMille2.cxx:1214 AliITSAlignMille2.cxx:1215 AliITSAlignMille2.cxx:1216 AliITSAlignMille2.cxx:1217 AliITSAlignMille2.cxx:1218 AliITSAlignMille2.cxx:1219 AliITSAlignMille2.cxx:1220 AliITSAlignMille2.cxx:1221 AliITSAlignMille2.cxx:1222 AliITSAlignMille2.cxx:1223 AliITSAlignMille2.cxx:1224 AliITSAlignMille2.cxx:1225 AliITSAlignMille2.cxx:1226 AliITSAlignMille2.cxx:1227 AliITSAlignMille2.cxx:1228 AliITSAlignMille2.cxx:1229 AliITSAlignMille2.cxx:1230 AliITSAlignMille2.cxx:1231 AliITSAlignMille2.cxx:1232 AliITSAlignMille2.cxx:1233 AliITSAlignMille2.cxx:1234 AliITSAlignMille2.cxx:1235 AliITSAlignMille2.cxx:1236 AliITSAlignMille2.cxx:1237 AliITSAlignMille2.cxx:1238 AliITSAlignMille2.cxx:1239 AliITSAlignMille2.cxx:1240 AliITSAlignMille2.cxx:1241 AliITSAlignMille2.cxx:1242 AliITSAlignMille2.cxx:1243 AliITSAlignMille2.cxx:1244 AliITSAlignMille2.cxx:1245 AliITSAlignMille2.cxx:1246 AliITSAlignMille2.cxx:1247 AliITSAlignMille2.cxx:1248 AliITSAlignMille2.cxx:1249 AliITSAlignMille2.cxx:1250 AliITSAlignMille2.cxx:1251 AliITSAlignMille2.cxx:1252 AliITSAlignMille2.cxx:1253 AliITSAlignMille2.cxx:1254 AliITSAlignMille2.cxx:1255 AliITSAlignMille2.cxx:1256 AliITSAlignMille2.cxx:1257 AliITSAlignMille2.cxx:1258 AliITSAlignMille2.cxx:1259 AliITSAlignMille2.cxx:1260 AliITSAlignMille2.cxx:1261 AliITSAlignMille2.cxx:1262 AliITSAlignMille2.cxx:1263 AliITSAlignMille2.cxx:1264 AliITSAlignMille2.cxx:1265 AliITSAlignMille2.cxx:1266 AliITSAlignMille2.cxx:1267 AliITSAlignMille2.cxx:1268 AliITSAlignMille2.cxx:1269 AliITSAlignMille2.cxx:1270 AliITSAlignMille2.cxx:1271 AliITSAlignMille2.cxx:1272 AliITSAlignMille2.cxx:1273 AliITSAlignMille2.cxx:1274 AliITSAlignMille2.cxx:1275 AliITSAlignMille2.cxx:1276 AliITSAlignMille2.cxx:1277 AliITSAlignMille2.cxx:1278 AliITSAlignMille2.cxx:1279 AliITSAlignMille2.cxx:1280 AliITSAlignMille2.cxx:1281 AliITSAlignMille2.cxx:1282 AliITSAlignMille2.cxx:1283 AliITSAlignMille2.cxx:1284 AliITSAlignMille2.cxx:1285 AliITSAlignMille2.cxx:1286 AliITSAlignMille2.cxx:1287 AliITSAlignMille2.cxx:1288 AliITSAlignMille2.cxx:1289 AliITSAlignMille2.cxx:1290 AliITSAlignMille2.cxx:1291 AliITSAlignMille2.cxx:1292 AliITSAlignMille2.cxx:1293 AliITSAlignMille2.cxx:1294 AliITSAlignMille2.cxx:1295 AliITSAlignMille2.cxx:1296 AliITSAlignMille2.cxx:1297 AliITSAlignMille2.cxx:1298 AliITSAlignMille2.cxx:1299 AliITSAlignMille2.cxx:1300 AliITSAlignMille2.cxx:1301 AliITSAlignMille2.cxx:1302 AliITSAlignMille2.cxx:1303 AliITSAlignMille2.cxx:1304 AliITSAlignMille2.cxx:1305 AliITSAlignMille2.cxx:1306 AliITSAlignMille2.cxx:1307 AliITSAlignMille2.cxx:1308 AliITSAlignMille2.cxx:1309 AliITSAlignMille2.cxx:1310 AliITSAlignMille2.cxx:1311 AliITSAlignMille2.cxx:1312 AliITSAlignMille2.cxx:1313 AliITSAlignMille2.cxx:1314 AliITSAlignMille2.cxx:1315 AliITSAlignMille2.cxx:1316 AliITSAlignMille2.cxx:1317 AliITSAlignMille2.cxx:1318 AliITSAlignMille2.cxx:1319 AliITSAlignMille2.cxx:1320 AliITSAlignMille2.cxx:1321 AliITSAlignMille2.cxx:1322 AliITSAlignMille2.cxx:1323 AliITSAlignMille2.cxx:1324 AliITSAlignMille2.cxx:1325 AliITSAlignMille2.cxx:1326 AliITSAlignMille2.cxx:1327 AliITSAlignMille2.cxx:1328 AliITSAlignMille2.cxx:1329 AliITSAlignMille2.cxx:1330 AliITSAlignMille2.cxx:1331 AliITSAlignMille2.cxx:1332 AliITSAlignMille2.cxx:1333 AliITSAlignMille2.cxx:1334 AliITSAlignMille2.cxx:1335 AliITSAlignMille2.cxx:1336 AliITSAlignMille2.cxx:1337 AliITSAlignMille2.cxx:1338 AliITSAlignMille2.cxx:1339 AliITSAlignMille2.cxx:1340 AliITSAlignMille2.cxx:1341 AliITSAlignMille2.cxx:1342 AliITSAlignMille2.cxx:1343 AliITSAlignMille2.cxx:1344 AliITSAlignMille2.cxx:1345 AliITSAlignMille2.cxx:1346 AliITSAlignMille2.cxx:1347 AliITSAlignMille2.cxx:1348 AliITSAlignMille2.cxx:1349 AliITSAlignMille2.cxx:1350 AliITSAlignMille2.cxx:1351 AliITSAlignMille2.cxx:1352 AliITSAlignMille2.cxx:1353 AliITSAlignMille2.cxx:1354 AliITSAlignMille2.cxx:1355 AliITSAlignMille2.cxx:1356 AliITSAlignMille2.cxx:1357 AliITSAlignMille2.cxx:1358 AliITSAlignMille2.cxx:1359 AliITSAlignMille2.cxx:1360 AliITSAlignMille2.cxx:1361 AliITSAlignMille2.cxx:1362 AliITSAlignMille2.cxx:1363 AliITSAlignMille2.cxx:1364 AliITSAlignMille2.cxx:1365 AliITSAlignMille2.cxx:1366 AliITSAlignMille2.cxx:1367 AliITSAlignMille2.cxx:1368 AliITSAlignMille2.cxx:1369 AliITSAlignMille2.cxx:1370 AliITSAlignMille2.cxx:1371 AliITSAlignMille2.cxx:1372 AliITSAlignMille2.cxx:1373 AliITSAlignMille2.cxx:1374 AliITSAlignMille2.cxx:1375 AliITSAlignMille2.cxx:1376 AliITSAlignMille2.cxx:1377 AliITSAlignMille2.cxx:1378 AliITSAlignMille2.cxx:1379 AliITSAlignMille2.cxx:1380 AliITSAlignMille2.cxx:1381 AliITSAlignMille2.cxx:1382 AliITSAlignMille2.cxx:1383 AliITSAlignMille2.cxx:1384 AliITSAlignMille2.cxx:1385 AliITSAlignMille2.cxx:1386 AliITSAlignMille2.cxx:1387 AliITSAlignMille2.cxx:1388 AliITSAlignMille2.cxx:1389 AliITSAlignMille2.cxx:1390 AliITSAlignMille2.cxx:1391 AliITSAlignMille2.cxx:1392 AliITSAlignMille2.cxx:1393 AliITSAlignMille2.cxx:1394 AliITSAlignMille2.cxx:1395 AliITSAlignMille2.cxx:1396 AliITSAlignMille2.cxx:1397 AliITSAlignMille2.cxx:1398 AliITSAlignMille2.cxx:1399 AliITSAlignMille2.cxx:1400 AliITSAlignMille2.cxx:1401 AliITSAlignMille2.cxx:1402 AliITSAlignMille2.cxx:1403 AliITSAlignMille2.cxx:1404 AliITSAlignMille2.cxx:1405 AliITSAlignMille2.cxx:1406 AliITSAlignMille2.cxx:1407 AliITSAlignMille2.cxx:1408 AliITSAlignMille2.cxx:1409 AliITSAlignMille2.cxx:1410 AliITSAlignMille2.cxx:1411 AliITSAlignMille2.cxx:1412 AliITSAlignMille2.cxx:1413 AliITSAlignMille2.cxx:1414 AliITSAlignMille2.cxx:1415 AliITSAlignMille2.cxx:1416 AliITSAlignMille2.cxx:1417 AliITSAlignMille2.cxx:1418 AliITSAlignMille2.cxx:1419 AliITSAlignMille2.cxx:1420 AliITSAlignMille2.cxx:1421 AliITSAlignMille2.cxx:1422 AliITSAlignMille2.cxx:1423 AliITSAlignMille2.cxx:1424 AliITSAlignMille2.cxx:1425 AliITSAlignMille2.cxx:1426 AliITSAlignMille2.cxx:1427 AliITSAlignMille2.cxx:1428 AliITSAlignMille2.cxx:1429 AliITSAlignMille2.cxx:1430 AliITSAlignMille2.cxx:1431 AliITSAlignMille2.cxx:1432 AliITSAlignMille2.cxx:1433 AliITSAlignMille2.cxx:1434 AliITSAlignMille2.cxx:1435 AliITSAlignMille2.cxx:1436 AliITSAlignMille2.cxx:1437 AliITSAlignMille2.cxx:1438 AliITSAlignMille2.cxx:1439 AliITSAlignMille2.cxx:1440 AliITSAlignMille2.cxx:1441 AliITSAlignMille2.cxx:1442 AliITSAlignMille2.cxx:1443 AliITSAlignMille2.cxx:1444 AliITSAlignMille2.cxx:1445 AliITSAlignMille2.cxx:1446 AliITSAlignMille2.cxx:1447 AliITSAlignMille2.cxx:1448 AliITSAlignMille2.cxx:1449 AliITSAlignMille2.cxx:1450 AliITSAlignMille2.cxx:1451 AliITSAlignMille2.cxx:1452 AliITSAlignMille2.cxx:1453 AliITSAlignMille2.cxx:1454 AliITSAlignMille2.cxx:1455 AliITSAlignMille2.cxx:1456 AliITSAlignMille2.cxx:1457 AliITSAlignMille2.cxx:1458 AliITSAlignMille2.cxx:1459 AliITSAlignMille2.cxx:1460 AliITSAlignMille2.cxx:1461 AliITSAlignMille2.cxx:1462 AliITSAlignMille2.cxx:1463 AliITSAlignMille2.cxx:1464 AliITSAlignMille2.cxx:1465 AliITSAlignMille2.cxx:1466 AliITSAlignMille2.cxx:1467 AliITSAlignMille2.cxx:1468 AliITSAlignMille2.cxx:1469 AliITSAlignMille2.cxx:1470 AliITSAlignMille2.cxx:1471 AliITSAlignMille2.cxx:1472 AliITSAlignMille2.cxx:1473 AliITSAlignMille2.cxx:1474 AliITSAlignMille2.cxx:1475 AliITSAlignMille2.cxx:1476 AliITSAlignMille2.cxx:1477 AliITSAlignMille2.cxx:1478 AliITSAlignMille2.cxx:1479 AliITSAlignMille2.cxx:1480 AliITSAlignMille2.cxx:1481 AliITSAlignMille2.cxx:1482 AliITSAlignMille2.cxx:1483 AliITSAlignMille2.cxx:1484 AliITSAlignMille2.cxx:1485 AliITSAlignMille2.cxx:1486 AliITSAlignMille2.cxx:1487 AliITSAlignMille2.cxx:1488 AliITSAlignMille2.cxx:1489 AliITSAlignMille2.cxx:1490 AliITSAlignMille2.cxx:1491 AliITSAlignMille2.cxx:1492 AliITSAlignMille2.cxx:1493 AliITSAlignMille2.cxx:1494 AliITSAlignMille2.cxx:1495 AliITSAlignMille2.cxx:1496 AliITSAlignMille2.cxx:1497 AliITSAlignMille2.cxx:1498 AliITSAlignMille2.cxx:1499 AliITSAlignMille2.cxx:1500 AliITSAlignMille2.cxx:1501 AliITSAlignMille2.cxx:1502 AliITSAlignMille2.cxx:1503 AliITSAlignMille2.cxx:1504 AliITSAlignMille2.cxx:1505 AliITSAlignMille2.cxx:1506 AliITSAlignMille2.cxx:1507 AliITSAlignMille2.cxx:1508 AliITSAlignMille2.cxx:1509 AliITSAlignMille2.cxx:1510 AliITSAlignMille2.cxx:1511 AliITSAlignMille2.cxx:1512 AliITSAlignMille2.cxx:1513 AliITSAlignMille2.cxx:1514 AliITSAlignMille2.cxx:1515 AliITSAlignMille2.cxx:1516 AliITSAlignMille2.cxx:1517 AliITSAlignMille2.cxx:1518 AliITSAlignMille2.cxx:1519 AliITSAlignMille2.cxx:1520 AliITSAlignMille2.cxx:1521 AliITSAlignMille2.cxx:1522 AliITSAlignMille2.cxx:1523 AliITSAlignMille2.cxx:1524 AliITSAlignMille2.cxx:1525 AliITSAlignMille2.cxx:1526 AliITSAlignMille2.cxx:1527 AliITSAlignMille2.cxx:1528 AliITSAlignMille2.cxx:1529 AliITSAlignMille2.cxx:1530 AliITSAlignMille2.cxx:1531 AliITSAlignMille2.cxx:1532 AliITSAlignMille2.cxx:1533 AliITSAlignMille2.cxx:1534 AliITSAlignMille2.cxx:1535 AliITSAlignMille2.cxx:1536 AliITSAlignMille2.cxx:1537 AliITSAlignMille2.cxx:1538 AliITSAlignMille2.cxx:1539 AliITSAlignMille2.cxx:1540 AliITSAlignMille2.cxx:1541 AliITSAlignMille2.cxx:1542 AliITSAlignMille2.cxx:1543 AliITSAlignMille2.cxx:1544 AliITSAlignMille2.cxx:1545 AliITSAlignMille2.cxx:1546 AliITSAlignMille2.cxx:1547 AliITSAlignMille2.cxx:1548 AliITSAlignMille2.cxx:1549 AliITSAlignMille2.cxx:1550 AliITSAlignMille2.cxx:1551 AliITSAlignMille2.cxx:1552 AliITSAlignMille2.cxx:1553 AliITSAlignMille2.cxx:1554 AliITSAlignMille2.cxx:1555 AliITSAlignMille2.cxx:1556 AliITSAlignMille2.cxx:1557 AliITSAlignMille2.cxx:1558 AliITSAlignMille2.cxx:1559 AliITSAlignMille2.cxx:1560 AliITSAlignMille2.cxx:1561 AliITSAlignMille2.cxx:1562 AliITSAlignMille2.cxx:1563 AliITSAlignMille2.cxx:1564 AliITSAlignMille2.cxx:1565 AliITSAlignMille2.cxx:1566 AliITSAlignMille2.cxx:1567 AliITSAlignMille2.cxx:1568 AliITSAlignMille2.cxx:1569 AliITSAlignMille2.cxx:1570 AliITSAlignMille2.cxx:1571 AliITSAlignMille2.cxx:1572 AliITSAlignMille2.cxx:1573 AliITSAlignMille2.cxx:1574 AliITSAlignMille2.cxx:1575 AliITSAlignMille2.cxx:1576 AliITSAlignMille2.cxx:1577 AliITSAlignMille2.cxx:1578 AliITSAlignMille2.cxx:1579 AliITSAlignMille2.cxx:1580 AliITSAlignMille2.cxx:1581 AliITSAlignMille2.cxx:1582 AliITSAlignMille2.cxx:1583 AliITSAlignMille2.cxx:1584 AliITSAlignMille2.cxx:1585 AliITSAlignMille2.cxx:1586 AliITSAlignMille2.cxx:1587 AliITSAlignMille2.cxx:1588 AliITSAlignMille2.cxx:1589 AliITSAlignMille2.cxx:1590 AliITSAlignMille2.cxx:1591 AliITSAlignMille2.cxx:1592 AliITSAlignMille2.cxx:1593 AliITSAlignMille2.cxx:1594 AliITSAlignMille2.cxx:1595 AliITSAlignMille2.cxx:1596 AliITSAlignMille2.cxx:1597 AliITSAlignMille2.cxx:1598 AliITSAlignMille2.cxx:1599 AliITSAlignMille2.cxx:1600 AliITSAlignMille2.cxx:1601 AliITSAlignMille2.cxx:1602 AliITSAlignMille2.cxx:1603 AliITSAlignMille2.cxx:1604 AliITSAlignMille2.cxx:1605 AliITSAlignMille2.cxx:1606 AliITSAlignMille2.cxx:1607 AliITSAlignMille2.cxx:1608 AliITSAlignMille2.cxx:1609 AliITSAlignMille2.cxx:1610 AliITSAlignMille2.cxx:1611 AliITSAlignMille2.cxx:1612 AliITSAlignMille2.cxx:1613 AliITSAlignMille2.cxx:1614 AliITSAlignMille2.cxx:1615 AliITSAlignMille2.cxx:1616 AliITSAlignMille2.cxx:1617 AliITSAlignMille2.cxx:1618 AliITSAlignMille2.cxx:1619 AliITSAlignMille2.cxx:1620 AliITSAlignMille2.cxx:1621 AliITSAlignMille2.cxx:1622 AliITSAlignMille2.cxx:1623 AliITSAlignMille2.cxx:1624 AliITSAlignMille2.cxx:1625 AliITSAlignMille2.cxx:1626 AliITSAlignMille2.cxx:1627 AliITSAlignMille2.cxx:1628 AliITSAlignMille2.cxx:1629 AliITSAlignMille2.cxx:1630 AliITSAlignMille2.cxx:1631 AliITSAlignMille2.cxx:1632 AliITSAlignMille2.cxx:1633 AliITSAlignMille2.cxx:1634 AliITSAlignMille2.cxx:1635 AliITSAlignMille2.cxx:1636 AliITSAlignMille2.cxx:1637 AliITSAlignMille2.cxx:1638 AliITSAlignMille2.cxx:1639 AliITSAlignMille2.cxx:1640 AliITSAlignMille2.cxx:1641 AliITSAlignMille2.cxx:1642 AliITSAlignMille2.cxx:1643 AliITSAlignMille2.cxx:1644 AliITSAlignMille2.cxx:1645 AliITSAlignMille2.cxx:1646 AliITSAlignMille2.cxx:1647 AliITSAlignMille2.cxx:1648 AliITSAlignMille2.cxx:1649 AliITSAlignMille2.cxx:1650 AliITSAlignMille2.cxx:1651 AliITSAlignMille2.cxx:1652 AliITSAlignMille2.cxx:1653 AliITSAlignMille2.cxx:1654 AliITSAlignMille2.cxx:1655 AliITSAlignMille2.cxx:1656 AliITSAlignMille2.cxx:1657 AliITSAlignMille2.cxx:1658 AliITSAlignMille2.cxx:1659 AliITSAlignMille2.cxx:1660 AliITSAlignMille2.cxx:1661 AliITSAlignMille2.cxx:1662 AliITSAlignMille2.cxx:1663 AliITSAlignMille2.cxx:1664 AliITSAlignMille2.cxx:1665 AliITSAlignMille2.cxx:1666 AliITSAlignMille2.cxx:1667 AliITSAlignMille2.cxx:1668 AliITSAlignMille2.cxx:1669 AliITSAlignMille2.cxx:1670 AliITSAlignMille2.cxx:1671 AliITSAlignMille2.cxx:1672 AliITSAlignMille2.cxx:1673 AliITSAlignMille2.cxx:1674 AliITSAlignMille2.cxx:1675 AliITSAlignMille2.cxx:1676 AliITSAlignMille2.cxx:1677 AliITSAlignMille2.cxx:1678 AliITSAlignMille2.cxx:1679 AliITSAlignMille2.cxx:1680 AliITSAlignMille2.cxx:1681 AliITSAlignMille2.cxx:1682 AliITSAlignMille2.cxx:1683 AliITSAlignMille2.cxx:1684 AliITSAlignMille2.cxx:1685 AliITSAlignMille2.cxx:1686 AliITSAlignMille2.cxx:1687 AliITSAlignMille2.cxx:1688 AliITSAlignMille2.cxx:1689 AliITSAlignMille2.cxx:1690 AliITSAlignMille2.cxx:1691 AliITSAlignMille2.cxx:1692 AliITSAlignMille2.cxx:1693 AliITSAlignMille2.cxx:1694 AliITSAlignMille2.cxx:1695 AliITSAlignMille2.cxx:1696 AliITSAlignMille2.cxx:1697 AliITSAlignMille2.cxx:1698 AliITSAlignMille2.cxx:1699 AliITSAlignMille2.cxx:1700 AliITSAlignMille2.cxx:1701 AliITSAlignMille2.cxx:1702 AliITSAlignMille2.cxx:1703 AliITSAlignMille2.cxx:1704 AliITSAlignMille2.cxx:1705 AliITSAlignMille2.cxx:1706 AliITSAlignMille2.cxx:1707 AliITSAlignMille2.cxx:1708 AliITSAlignMille2.cxx:1709 AliITSAlignMille2.cxx:1710 AliITSAlignMille2.cxx:1711 AliITSAlignMille2.cxx:1712 AliITSAlignMille2.cxx:1713 AliITSAlignMille2.cxx:1714 AliITSAlignMille2.cxx:1715 AliITSAlignMille2.cxx:1716 AliITSAlignMille2.cxx:1717 AliITSAlignMille2.cxx:1718 AliITSAlignMille2.cxx:1719 AliITSAlignMille2.cxx:1720 AliITSAlignMille2.cxx:1721 AliITSAlignMille2.cxx:1722 AliITSAlignMille2.cxx:1723 AliITSAlignMille2.cxx:1724 AliITSAlignMille2.cxx:1725 AliITSAlignMille2.cxx:1726 AliITSAlignMille2.cxx:1727 AliITSAlignMille2.cxx:1728 AliITSAlignMille2.cxx:1729 AliITSAlignMille2.cxx:1730 AliITSAlignMille2.cxx:1731 AliITSAlignMille2.cxx:1732 AliITSAlignMille2.cxx:1733 AliITSAlignMille2.cxx:1734 AliITSAlignMille2.cxx:1735 AliITSAlignMille2.cxx:1736 AliITSAlignMille2.cxx:1737 AliITSAlignMille2.cxx:1738 AliITSAlignMille2.cxx:1739 AliITSAlignMille2.cxx:1740 AliITSAlignMille2.cxx:1741 AliITSAlignMille2.cxx:1742 AliITSAlignMille2.cxx:1743 AliITSAlignMille2.cxx:1744 AliITSAlignMille2.cxx:1745 AliITSAlignMille2.cxx:1746 AliITSAlignMille2.cxx:1747 AliITSAlignMille2.cxx:1748 AliITSAlignMille2.cxx:1749 AliITSAlignMille2.cxx:1750 AliITSAlignMille2.cxx:1751 AliITSAlignMille2.cxx:1752 AliITSAlignMille2.cxx:1753 AliITSAlignMille2.cxx:1754 AliITSAlignMille2.cxx:1755 AliITSAlignMille2.cxx:1756 AliITSAlignMille2.cxx:1757 AliITSAlignMille2.cxx:1758 AliITSAlignMille2.cxx:1759 AliITSAlignMille2.cxx:1760 AliITSAlignMille2.cxx:1761 AliITSAlignMille2.cxx:1762 AliITSAlignMille2.cxx:1763 AliITSAlignMille2.cxx:1764 AliITSAlignMille2.cxx:1765 AliITSAlignMille2.cxx:1766 AliITSAlignMille2.cxx:1767 AliITSAlignMille2.cxx:1768 AliITSAlignMille2.cxx:1769 AliITSAlignMille2.cxx:1770 AliITSAlignMille2.cxx:1771 AliITSAlignMille2.cxx:1772 AliITSAlignMille2.cxx:1773 AliITSAlignMille2.cxx:1774 AliITSAlignMille2.cxx:1775 AliITSAlignMille2.cxx:1776 AliITSAlignMille2.cxx:1777 AliITSAlignMille2.cxx:1778 AliITSAlignMille2.cxx:1779 AliITSAlignMille2.cxx:1780 AliITSAlignMille2.cxx:1781 AliITSAlignMille2.cxx:1782 AliITSAlignMille2.cxx:1783 AliITSAlignMille2.cxx:1784 AliITSAlignMille2.cxx:1785 AliITSAlignMille2.cxx:1786 AliITSAlignMille2.cxx:1787 AliITSAlignMille2.cxx:1788 AliITSAlignMille2.cxx:1789 AliITSAlignMille2.cxx:1790 AliITSAlignMille2.cxx:1791 AliITSAlignMille2.cxx:1792 AliITSAlignMille2.cxx:1793 AliITSAlignMille2.cxx:1794 AliITSAlignMille2.cxx:1795 AliITSAlignMille2.cxx:1796 AliITSAlignMille2.cxx:1797 AliITSAlignMille2.cxx:1798 AliITSAlignMille2.cxx:1799 AliITSAlignMille2.cxx:1800 AliITSAlignMille2.cxx:1801 AliITSAlignMille2.cxx:1802 AliITSAlignMille2.cxx:1803 AliITSAlignMille2.cxx:1804 AliITSAlignMille2.cxx:1805 AliITSAlignMille2.cxx:1806 AliITSAlignMille2.cxx:1807 AliITSAlignMille2.cxx:1808 AliITSAlignMille2.cxx:1809 AliITSAlignMille2.cxx:1810 AliITSAlignMille2.cxx:1811 AliITSAlignMille2.cxx:1812 AliITSAlignMille2.cxx:1813 AliITSAlignMille2.cxx:1814 AliITSAlignMille2.cxx:1815 AliITSAlignMille2.cxx:1816 AliITSAlignMille2.cxx:1817 AliITSAlignMille2.cxx:1818 AliITSAlignMille2.cxx:1819 AliITSAlignMille2.cxx:1820 AliITSAlignMille2.cxx:1821 AliITSAlignMille2.cxx:1822 AliITSAlignMille2.cxx:1823 AliITSAlignMille2.cxx:1824 AliITSAlignMille2.cxx:1825 AliITSAlignMille2.cxx:1826 AliITSAlignMille2.cxx:1827 AliITSAlignMille2.cxx:1828 AliITSAlignMille2.cxx:1829 AliITSAlignMille2.cxx:1830 AliITSAlignMille2.cxx:1831 AliITSAlignMille2.cxx:1832 AliITSAlignMille2.cxx:1833 AliITSAlignMille2.cxx:1834 AliITSAlignMille2.cxx:1835 AliITSAlignMille2.cxx:1836 AliITSAlignMille2.cxx:1837 AliITSAlignMille2.cxx:1838 AliITSAlignMille2.cxx:1839 AliITSAlignMille2.cxx:1840 AliITSAlignMille2.cxx:1841 AliITSAlignMille2.cxx:1842 AliITSAlignMille2.cxx:1843 AliITSAlignMille2.cxx:1844 AliITSAlignMille2.cxx:1845 AliITSAlignMille2.cxx:1846 AliITSAlignMille2.cxx:1847 AliITSAlignMille2.cxx:1848 AliITSAlignMille2.cxx:1849 AliITSAlignMille2.cxx:1850 AliITSAlignMille2.cxx:1851 AliITSAlignMille2.cxx:1852 AliITSAlignMille2.cxx:1853 AliITSAlignMille2.cxx:1854 AliITSAlignMille2.cxx:1855 AliITSAlignMille2.cxx:1856 AliITSAlignMille2.cxx:1857 AliITSAlignMille2.cxx:1858 AliITSAlignMille2.cxx:1859 AliITSAlignMille2.cxx:1860 AliITSAlignMille2.cxx:1861 AliITSAlignMille2.cxx:1862 AliITSAlignMille2.cxx:1863 AliITSAlignMille2.cxx:1864 AliITSAlignMille2.cxx:1865 AliITSAlignMille2.cxx:1866 AliITSAlignMille2.cxx:1867 AliITSAlignMille2.cxx:1868 AliITSAlignMille2.cxx:1869 AliITSAlignMille2.cxx:1870 AliITSAlignMille2.cxx:1871 AliITSAlignMille2.cxx:1872 AliITSAlignMille2.cxx:1873 AliITSAlignMille2.cxx:1874 AliITSAlignMille2.cxx:1875 AliITSAlignMille2.cxx:1876 AliITSAlignMille2.cxx:1877 AliITSAlignMille2.cxx:1878 AliITSAlignMille2.cxx:1879 AliITSAlignMille2.cxx:1880 AliITSAlignMille2.cxx:1881 AliITSAlignMille2.cxx:1882 AliITSAlignMille2.cxx:1883 AliITSAlignMille2.cxx:1884 AliITSAlignMille2.cxx:1885 AliITSAlignMille2.cxx:1886 AliITSAlignMille2.cxx:1887 AliITSAlignMille2.cxx:1888 AliITSAlignMille2.cxx:1889 AliITSAlignMille2.cxx:1890 AliITSAlignMille2.cxx:1891 AliITSAlignMille2.cxx:1892 AliITSAlignMille2.cxx:1893 AliITSAlignMille2.cxx:1894 AliITSAlignMille2.cxx:1895 AliITSAlignMille2.cxx:1896 AliITSAlignMille2.cxx:1897 AliITSAlignMille2.cxx:1898 AliITSAlignMille2.cxx:1899 AliITSAlignMille2.cxx:1900 AliITSAlignMille2.cxx:1901 AliITSAlignMille2.cxx:1902 AliITSAlignMille2.cxx:1903 AliITSAlignMille2.cxx:1904 AliITSAlignMille2.cxx:1905 AliITSAlignMille2.cxx:1906 AliITSAlignMille2.cxx:1907 AliITSAlignMille2.cxx:1908 AliITSAlignMille2.cxx:1909 AliITSAlignMille2.cxx:1910 AliITSAlignMille2.cxx:1911 AliITSAlignMille2.cxx:1912 AliITSAlignMille2.cxx:1913 AliITSAlignMille2.cxx:1914 AliITSAlignMille2.cxx:1915 AliITSAlignMille2.cxx:1916 AliITSAlignMille2.cxx:1917 AliITSAlignMille2.cxx:1918 AliITSAlignMille2.cxx:1919 AliITSAlignMille2.cxx:1920 AliITSAlignMille2.cxx:1921 AliITSAlignMille2.cxx:1922 AliITSAlignMille2.cxx:1923 AliITSAlignMille2.cxx:1924 AliITSAlignMille2.cxx:1925 AliITSAlignMille2.cxx:1926 AliITSAlignMille2.cxx:1927 AliITSAlignMille2.cxx:1928 AliITSAlignMille2.cxx:1929 AliITSAlignMille2.cxx:1930 AliITSAlignMille2.cxx:1931 AliITSAlignMille2.cxx:1932 AliITSAlignMille2.cxx:1933 AliITSAlignMille2.cxx:1934 AliITSAlignMille2.cxx:1935 AliITSAlignMille2.cxx:1936 AliITSAlignMille2.cxx:1937 AliITSAlignMille2.cxx:1938 AliITSAlignMille2.cxx:1939 AliITSAlignMille2.cxx:1940 AliITSAlignMille2.cxx:1941 AliITSAlignMille2.cxx:1942 AliITSAlignMille2.cxx:1943 AliITSAlignMille2.cxx:1944 AliITSAlignMille2.cxx:1945 AliITSAlignMille2.cxx:1946 AliITSAlignMille2.cxx:1947 AliITSAlignMille2.cxx:1948 AliITSAlignMille2.cxx:1949 AliITSAlignMille2.cxx:1950 AliITSAlignMille2.cxx:1951 AliITSAlignMille2.cxx:1952 AliITSAlignMille2.cxx:1953 AliITSAlignMille2.cxx:1954 AliITSAlignMille2.cxx:1955 AliITSAlignMille2.cxx:1956 AliITSAlignMille2.cxx:1957 AliITSAlignMille2.cxx:1958 AliITSAlignMille2.cxx:1959 AliITSAlignMille2.cxx:1960 AliITSAlignMille2.cxx:1961 AliITSAlignMille2.cxx:1962 AliITSAlignMille2.cxx:1963 AliITSAlignMille2.cxx:1964 AliITSAlignMille2.cxx:1965 AliITSAlignMille2.cxx:1966 AliITSAlignMille2.cxx:1967 AliITSAlignMille2.cxx:1968 AliITSAlignMille2.cxx:1969 AliITSAlignMille2.cxx:1970 AliITSAlignMille2.cxx:1971 AliITSAlignMille2.cxx:1972 AliITSAlignMille2.cxx:1973 AliITSAlignMille2.cxx:1974 AliITSAlignMille2.cxx:1975 AliITSAlignMille2.cxx:1976 AliITSAlignMille2.cxx:1977 AliITSAlignMille2.cxx:1978 AliITSAlignMille2.cxx:1979 AliITSAlignMille2.cxx:1980 AliITSAlignMille2.cxx:1981 AliITSAlignMille2.cxx:1982 AliITSAlignMille2.cxx:1983 AliITSAlignMille2.cxx:1984 AliITSAlignMille2.cxx:1985 AliITSAlignMille2.cxx:1986 AliITSAlignMille2.cxx:1987 AliITSAlignMille2.cxx:1988 AliITSAlignMille2.cxx:1989 AliITSAlignMille2.cxx:1990 AliITSAlignMille2.cxx:1991 AliITSAlignMille2.cxx:1992 AliITSAlignMille2.cxx:1993 AliITSAlignMille2.cxx:1994 AliITSAlignMille2.cxx:1995 AliITSAlignMille2.cxx:1996 AliITSAlignMille2.cxx:1997 AliITSAlignMille2.cxx:1998 AliITSAlignMille2.cxx:1999 AliITSAlignMille2.cxx:2000 AliITSAlignMille2.cxx:2001 AliITSAlignMille2.cxx:2002 AliITSAlignMille2.cxx:2003 AliITSAlignMille2.cxx:2004 AliITSAlignMille2.cxx:2005 AliITSAlignMille2.cxx:2006 AliITSAlignMille2.cxx:2007 AliITSAlignMille2.cxx:2008 AliITSAlignMille2.cxx:2009 AliITSAlignMille2.cxx:2010 AliITSAlignMille2.cxx:2011 AliITSAlignMille2.cxx:2012 AliITSAlignMille2.cxx:2013 AliITSAlignMille2.cxx:2014 AliITSAlignMille2.cxx:2015 AliITSAlignMille2.cxx:2016 AliITSAlignMille2.cxx:2017 AliITSAlignMille2.cxx:2018 AliITSAlignMille2.cxx:2019 AliITSAlignMille2.cxx:2020 AliITSAlignMille2.cxx:2021 AliITSAlignMille2.cxx:2022 AliITSAlignMille2.cxx:2023 AliITSAlignMille2.cxx:2024 AliITSAlignMille2.cxx:2025 AliITSAlignMille2.cxx:2026 AliITSAlignMille2.cxx:2027 AliITSAlignMille2.cxx:2028 AliITSAlignMille2.cxx:2029 AliITSAlignMille2.cxx:2030 AliITSAlignMille2.cxx:2031 AliITSAlignMille2.cxx:2032 AliITSAlignMille2.cxx:2033 AliITSAlignMille2.cxx:2034 AliITSAlignMille2.cxx:2035 AliITSAlignMille2.cxx:2036 AliITSAlignMille2.cxx:2037 AliITSAlignMille2.cxx:2038 AliITSAlignMille2.cxx:2039 AliITSAlignMille2.cxx:2040 AliITSAlignMille2.cxx:2041 AliITSAlignMille2.cxx:2042 AliITSAlignMille2.cxx:2043 AliITSAlignMille2.cxx:2044 AliITSAlignMille2.cxx:2045 AliITSAlignMille2.cxx:2046 AliITSAlignMille2.cxx:2047 AliITSAlignMille2.cxx:2048 AliITSAlignMille2.cxx:2049 AliITSAlignMille2.cxx:2050 AliITSAlignMille2.cxx:2051 AliITSAlignMille2.cxx:2052 AliITSAlignMille2.cxx:2053 AliITSAlignMille2.cxx:2054 AliITSAlignMille2.cxx:2055 AliITSAlignMille2.cxx:2056 AliITSAlignMille2.cxx:2057 AliITSAlignMille2.cxx:2058 AliITSAlignMille2.cxx:2059 AliITSAlignMille2.cxx:2060 AliITSAlignMille2.cxx:2061 AliITSAlignMille2.cxx:2062 AliITSAlignMille2.cxx:2063 AliITSAlignMille2.cxx:2064 AliITSAlignMille2.cxx:2065 AliITSAlignMille2.cxx:2066 AliITSAlignMille2.cxx:2067 AliITSAlignMille2.cxx:2068 AliITSAlignMille2.cxx:2069 AliITSAlignMille2.cxx:2070 AliITSAlignMille2.cxx:2071 AliITSAlignMille2.cxx:2072 AliITSAlignMille2.cxx:2073 AliITSAlignMille2.cxx:2074 AliITSAlignMille2.cxx:2075 AliITSAlignMille2.cxx:2076 AliITSAlignMille2.cxx:2077 AliITSAlignMille2.cxx:2078 AliITSAlignMille2.cxx:2079 AliITSAlignMille2.cxx:2080 AliITSAlignMille2.cxx:2081 AliITSAlignMille2.cxx:2082 AliITSAlignMille2.cxx:2083 AliITSAlignMille2.cxx:2084 AliITSAlignMille2.cxx:2085 AliITSAlignMille2.cxx:2086 AliITSAlignMille2.cxx:2087 AliITSAlignMille2.cxx:2088 AliITSAlignMille2.cxx:2089 AliITSAlignMille2.cxx:2090 AliITSAlignMille2.cxx:2091 AliITSAlignMille2.cxx:2092 AliITSAlignMille2.cxx:2093 AliITSAlignMille2.cxx:2094 AliITSAlignMille2.cxx:2095 AliITSAlignMille2.cxx:2096 AliITSAlignMille2.cxx:2097 AliITSAlignMille2.cxx:2098 AliITSAlignMille2.cxx:2099 AliITSAlignMille2.cxx:2100 AliITSAlignMille2.cxx:2101 AliITSAlignMille2.cxx:2102 AliITSAlignMille2.cxx:2103 AliITSAlignMille2.cxx:2104 AliITSAlignMille2.cxx:2105 AliITSAlignMille2.cxx:2106 AliITSAlignMille2.cxx:2107 AliITSAlignMille2.cxx:2108 AliITSAlignMille2.cxx:2109 AliITSAlignMille2.cxx:2110 AliITSAlignMille2.cxx:2111 AliITSAlignMille2.cxx:2112 AliITSAlignMille2.cxx:2113 AliITSAlignMille2.cxx:2114 AliITSAlignMille2.cxx:2115 AliITSAlignMille2.cxx:2116 AliITSAlignMille2.cxx:2117 AliITSAlignMille2.cxx:2118 AliITSAlignMille2.cxx:2119 AliITSAlignMille2.cxx:2120 AliITSAlignMille2.cxx:2121 AliITSAlignMille2.cxx:2122 AliITSAlignMille2.cxx:2123 AliITSAlignMille2.cxx:2124 AliITSAlignMille2.cxx:2125 AliITSAlignMille2.cxx:2126 AliITSAlignMille2.cxx:2127 AliITSAlignMille2.cxx:2128 AliITSAlignMille2.cxx:2129 AliITSAlignMille2.cxx:2130 AliITSAlignMille2.cxx:2131 AliITSAlignMille2.cxx:2132 AliITSAlignMille2.cxx:2133 AliITSAlignMille2.cxx:2134 AliITSAlignMille2.cxx:2135 AliITSAlignMille2.cxx:2136 AliITSAlignMille2.cxx:2137 AliITSAlignMille2.cxx:2138 AliITSAlignMille2.cxx:2139 AliITSAlignMille2.cxx:2140 AliITSAlignMille2.cxx:2141 AliITSAlignMille2.cxx:2142 AliITSAlignMille2.cxx:2143 AliITSAlignMille2.cxx:2144 AliITSAlignMille2.cxx:2145 AliITSAlignMille2.cxx:2146 AliITSAlignMille2.cxx:2147 AliITSAlignMille2.cxx:2148 AliITSAlignMille2.cxx:2149 AliITSAlignMille2.cxx:2150 AliITSAlignMille2.cxx:2151 AliITSAlignMille2.cxx:2152 AliITSAlignMille2.cxx:2153 AliITSAlignMille2.cxx:2154 AliITSAlignMille2.cxx:2155 AliITSAlignMille2.cxx:2156 AliITSAlignMille2.cxx:2157 AliITSAlignMille2.cxx:2158 AliITSAlignMille2.cxx:2159 AliITSAlignMille2.cxx:2160 AliITSAlignMille2.cxx:2161 AliITSAlignMille2.cxx:2162 AliITSAlignMille2.cxx:2163 AliITSAlignMille2.cxx:2164 AliITSAlignMille2.cxx:2165 AliITSAlignMille2.cxx:2166 AliITSAlignMille2.cxx:2167 AliITSAlignMille2.cxx:2168 AliITSAlignMille2.cxx:2169 AliITSAlignMille2.cxx:2170 AliITSAlignMille2.cxx:2171 AliITSAlignMille2.cxx:2172 AliITSAlignMille2.cxx:2173 AliITSAlignMille2.cxx:2174 AliITSAlignMille2.cxx:2175 AliITSAlignMille2.cxx:2176 AliITSAlignMille2.cxx:2177 AliITSAlignMille2.cxx:2178 AliITSAlignMille2.cxx:2179 AliITSAlignMille2.cxx:2180 AliITSAlignMille2.cxx:2181 AliITSAlignMille2.cxx:2182 AliITSAlignMille2.cxx:2183 AliITSAlignMille2.cxx:2184 AliITSAlignMille2.cxx:2185 AliITSAlignMille2.cxx:2186 AliITSAlignMille2.cxx:2187 AliITSAlignMille2.cxx:2188 AliITSAlignMille2.cxx:2189 AliITSAlignMille2.cxx:2190 AliITSAlignMille2.cxx:2191 AliITSAlignMille2.cxx:2192 AliITSAlignMille2.cxx:2193 AliITSAlignMille2.cxx:2194 AliITSAlignMille2.cxx:2195 AliITSAlignMille2.cxx:2196 AliITSAlignMille2.cxx:2197 AliITSAlignMille2.cxx:2198 AliITSAlignMille2.cxx:2199 AliITSAlignMille2.cxx:2200 AliITSAlignMille2.cxx:2201 AliITSAlignMille2.cxx:2202 AliITSAlignMille2.cxx:2203 AliITSAlignMille2.cxx:2204 AliITSAlignMille2.cxx:2205 AliITSAlignMille2.cxx:2206 AliITSAlignMille2.cxx:2207 AliITSAlignMille2.cxx:2208 AliITSAlignMille2.cxx:2209 AliITSAlignMille2.cxx:2210 AliITSAlignMille2.cxx:2211 AliITSAlignMille2.cxx:2212 AliITSAlignMille2.cxx:2213 AliITSAlignMille2.cxx:2214 AliITSAlignMille2.cxx:2215 AliITSAlignMille2.cxx:2216 AliITSAlignMille2.cxx:2217 AliITSAlignMille2.cxx:2218 AliITSAlignMille2.cxx:2219 AliITSAlignMille2.cxx:2220 AliITSAlignMille2.cxx:2221 AliITSAlignMille2.cxx:2222 AliITSAlignMille2.cxx:2223 AliITSAlignMille2.cxx:2224 AliITSAlignMille2.cxx:2225 AliITSAlignMille2.cxx:2226 AliITSAlignMille2.cxx:2227 AliITSAlignMille2.cxx:2228 AliITSAlignMille2.cxx:2229 AliITSAlignMille2.cxx:2230 AliITSAlignMille2.cxx:2231 AliITSAlignMille2.cxx:2232 AliITSAlignMille2.cxx:2233 AliITSAlignMille2.cxx:2234 AliITSAlignMille2.cxx:2235 AliITSAlignMille2.cxx:2236 AliITSAlignMille2.cxx:2237 AliITSAlignMille2.cxx:2238 AliITSAlignMille2.cxx:2239 AliITSAlignMille2.cxx:2240 AliITSAlignMille2.cxx:2241 AliITSAlignMille2.cxx:2242 AliITSAlignMille2.cxx:2243 AliITSAlignMille2.cxx:2244 AliITSAlignMille2.cxx:2245 AliITSAlignMille2.cxx:2246 AliITSAlignMille2.cxx:2247 AliITSAlignMille2.cxx:2248 AliITSAlignMille2.cxx:2249 AliITSAlignMille2.cxx:2250 AliITSAlignMille2.cxx:2251 AliITSAlignMille2.cxx:2252 AliITSAlignMille2.cxx:2253 AliITSAlignMille2.cxx:2254 AliITSAlignMille2.cxx:2255 AliITSAlignMille2.cxx:2256 AliITSAlignMille2.cxx:2257 AliITSAlignMille2.cxx:2258 AliITSAlignMille2.cxx:2259 AliITSAlignMille2.cxx:2260 AliITSAlignMille2.cxx:2261 AliITSAlignMille2.cxx:2262 AliITSAlignMille2.cxx:2263 AliITSAlignMille2.cxx:2264 AliITSAlignMille2.cxx:2265 AliITSAlignMille2.cxx:2266 AliITSAlignMille2.cxx:2267 AliITSAlignMille2.cxx:2268 AliITSAlignMille2.cxx:2269 AliITSAlignMille2.cxx:2270 AliITSAlignMille2.cxx:2271 AliITSAlignMille2.cxx:2272 AliITSAlignMille2.cxx:2273 AliITSAlignMille2.cxx:2274 AliITSAlignMille2.cxx:2275 AliITSAlignMille2.cxx:2276 AliITSAlignMille2.cxx:2277 AliITSAlignMille2.cxx:2278 AliITSAlignMille2.cxx:2279 AliITSAlignMille2.cxx:2280 AliITSAlignMille2.cxx:2281 AliITSAlignMille2.cxx:2282 AliITSAlignMille2.cxx:2283 AliITSAlignMille2.cxx:2284 AliITSAlignMille2.cxx:2285 AliITSAlignMille2.cxx:2286 AliITSAlignMille2.cxx:2287 AliITSAlignMille2.cxx:2288 AliITSAlignMille2.cxx:2289 AliITSAlignMille2.cxx:2290 AliITSAlignMille2.cxx:2291 AliITSAlignMille2.cxx:2292 AliITSAlignMille2.cxx:2293 AliITSAlignMille2.cxx:2294 AliITSAlignMille2.cxx:2295 AliITSAlignMille2.cxx:2296 AliITSAlignMille2.cxx:2297 AliITSAlignMille2.cxx:2298 AliITSAlignMille2.cxx:2299 AliITSAlignMille2.cxx:2300 AliITSAlignMille2.cxx:2301 AliITSAlignMille2.cxx:2302 AliITSAlignMille2.cxx:2303 AliITSAlignMille2.cxx:2304 AliITSAlignMille2.cxx:2305 AliITSAlignMille2.cxx:2306 AliITSAlignMille2.cxx:2307 AliITSAlignMille2.cxx:2308 AliITSAlignMille2.cxx:2309 AliITSAlignMille2.cxx:2310 AliITSAlignMille2.cxx:2311 AliITSAlignMille2.cxx:2312 AliITSAlignMille2.cxx:2313 AliITSAlignMille2.cxx:2314 AliITSAlignMille2.cxx:2315 AliITSAlignMille2.cxx:2316 AliITSAlignMille2.cxx:2317 AliITSAlignMille2.cxx:2318 AliITSAlignMille2.cxx:2319 AliITSAlignMille2.cxx:2320 AliITSAlignMille2.cxx:2321 AliITSAlignMille2.cxx:2322 AliITSAlignMille2.cxx:2323 AliITSAlignMille2.cxx:2324 AliITSAlignMille2.cxx:2325 AliITSAlignMille2.cxx:2326 AliITSAlignMille2.cxx:2327 AliITSAlignMille2.cxx:2328 AliITSAlignMille2.cxx:2329 AliITSAlignMille2.cxx:2330 AliITSAlignMille2.cxx:2331 AliITSAlignMille2.cxx:2332 AliITSAlignMille2.cxx:2333 AliITSAlignMille2.cxx:2334 AliITSAlignMille2.cxx:2335 AliITSAlignMille2.cxx:2336 AliITSAlignMille2.cxx:2337 AliITSAlignMille2.cxx:2338 AliITSAlignMille2.cxx:2339 AliITSAlignMille2.cxx:2340 AliITSAlignMille2.cxx:2341 AliITSAlignMille2.cxx:2342 AliITSAlignMille2.cxx:2343 AliITSAlignMille2.cxx:2344 AliITSAlignMille2.cxx:2345 AliITSAlignMille2.cxx:2346 AliITSAlignMille2.cxx:2347 AliITSAlignMille2.cxx:2348 AliITSAlignMille2.cxx:2349 AliITSAlignMille2.cxx:2350 AliITSAlignMille2.cxx:2351 AliITSAlignMille2.cxx:2352 AliITSAlignMille2.cxx:2353 AliITSAlignMille2.cxx:2354 AliITSAlignMille2.cxx:2355 AliITSAlignMille2.cxx:2356 AliITSAlignMille2.cxx:2357 AliITSAlignMille2.cxx:2358 AliITSAlignMille2.cxx:2359 AliITSAlignMille2.cxx:2360 AliITSAlignMille2.cxx:2361 AliITSAlignMille2.cxx:2362 AliITSAlignMille2.cxx:2363 AliITSAlignMille2.cxx:2364 AliITSAlignMille2.cxx:2365 AliITSAlignMille2.cxx:2366 AliITSAlignMille2.cxx:2367 AliITSAlignMille2.cxx:2368 AliITSAlignMille2.cxx:2369 AliITSAlignMille2.cxx:2370 AliITSAlignMille2.cxx:2371 AliITSAlignMille2.cxx:2372 AliITSAlignMille2.cxx:2373 AliITSAlignMille2.cxx:2374 AliITSAlignMille2.cxx:2375 AliITSAlignMille2.cxx:2376 AliITSAlignMille2.cxx:2377 AliITSAlignMille2.cxx:2378 AliITSAlignMille2.cxx:2379 AliITSAlignMille2.cxx:2380 AliITSAlignMille2.cxx:2381 AliITSAlignMille2.cxx:2382 AliITSAlignMille2.cxx:2383 AliITSAlignMille2.cxx:2384 AliITSAlignMille2.cxx:2385 AliITSAlignMille2.cxx:2386 AliITSAlignMille2.cxx:2387 AliITSAlignMille2.cxx:2388 AliITSAlignMille2.cxx:2389 AliITSAlignMille2.cxx:2390 AliITSAlignMille2.cxx:2391 AliITSAlignMille2.cxx:2392 AliITSAlignMille2.cxx:2393 AliITSAlignMille2.cxx:2394 AliITSAlignMille2.cxx:2395 AliITSAlignMille2.cxx:2396 AliITSAlignMille2.cxx:2397 AliITSAlignMille2.cxx:2398 AliITSAlignMille2.cxx:2399 AliITSAlignMille2.cxx:2400 AliITSAlignMille2.cxx:2401 AliITSAlignMille2.cxx:2402 AliITSAlignMille2.cxx:2403 AliITSAlignMille2.cxx:2404 AliITSAlignMille2.cxx:2405 AliITSAlignMille2.cxx:2406 AliITSAlignMille2.cxx:2407 AliITSAlignMille2.cxx:2408 AliITSAlignMille2.cxx:2409 AliITSAlignMille2.cxx:2410 AliITSAlignMille2.cxx:2411 AliITSAlignMille2.cxx:2412 AliITSAlignMille2.cxx:2413 AliITSAlignMille2.cxx:2414 AliITSAlignMille2.cxx:2415 AliITSAlignMille2.cxx:2416 AliITSAlignMille2.cxx:2417 AliITSAlignMille2.cxx:2418 AliITSAlignMille2.cxx:2419 AliITSAlignMille2.cxx:2420 AliITSAlignMille2.cxx:2421 AliITSAlignMille2.cxx:2422 AliITSAlignMille2.cxx:2423 AliITSAlignMille2.cxx:2424 AliITSAlignMille2.cxx:2425 AliITSAlignMille2.cxx:2426 AliITSAlignMille2.cxx:2427 AliITSAlignMille2.cxx:2428 AliITSAlignMille2.cxx:2429 AliITSAlignMille2.cxx:2430 AliITSAlignMille2.cxx:2431 AliITSAlignMille2.cxx:2432 AliITSAlignMille2.cxx:2433 AliITSAlignMille2.cxx:2434 AliITSAlignMille2.cxx:2435 AliITSAlignMille2.cxx:2436 AliITSAlignMille2.cxx:2437 AliITSAlignMille2.cxx:2438 AliITSAlignMille2.cxx:2439 AliITSAlignMille2.cxx:2440 AliITSAlignMille2.cxx:2441 AliITSAlignMille2.cxx:2442 AliITSAlignMille2.cxx:2443 AliITSAlignMille2.cxx:2444 AliITSAlignMille2.cxx:2445 AliITSAlignMille2.cxx:2446 AliITSAlignMille2.cxx:2447 AliITSAlignMille2.cxx:2448 AliITSAlignMille2.cxx:2449 AliITSAlignMille2.cxx:2450 AliITSAlignMille2.cxx:2451 AliITSAlignMille2.cxx:2452 AliITSAlignMille2.cxx:2453 AliITSAlignMille2.cxx:2454 AliITSAlignMille2.cxx:2455 AliITSAlignMille2.cxx:2456 AliITSAlignMille2.cxx:2457 AliITSAlignMille2.cxx:2458 AliITSAlignMille2.cxx:2459 AliITSAlignMille2.cxx:2460 AliITSAlignMille2.cxx:2461 AliITSAlignMille2.cxx:2462 AliITSAlignMille2.cxx:2463 AliITSAlignMille2.cxx:2464 AliITSAlignMille2.cxx:2465 AliITSAlignMille2.cxx:2466 AliITSAlignMille2.cxx:2467 AliITSAlignMille2.cxx:2468 AliITSAlignMille2.cxx:2469 AliITSAlignMille2.cxx:2470 AliITSAlignMille2.cxx:2471 AliITSAlignMille2.cxx:2472 AliITSAlignMille2.cxx:2473 AliITSAlignMille2.cxx:2474 AliITSAlignMille2.cxx:2475 AliITSAlignMille2.cxx:2476 AliITSAlignMille2.cxx:2477 AliITSAlignMille2.cxx:2478 AliITSAlignMille2.cxx:2479 AliITSAlignMille2.cxx:2480 AliITSAlignMille2.cxx:2481 AliITSAlignMille2.cxx:2482 AliITSAlignMille2.cxx:2483 AliITSAlignMille2.cxx:2484 AliITSAlignMille2.cxx:2485 AliITSAlignMille2.cxx:2486 AliITSAlignMille2.cxx:2487 AliITSAlignMille2.cxx:2488 AliITSAlignMille2.cxx:2489 AliITSAlignMille2.cxx:2490 AliITSAlignMille2.cxx:2491 AliITSAlignMille2.cxx:2492 AliITSAlignMille2.cxx:2493 AliITSAlignMille2.cxx:2494 AliITSAlignMille2.cxx:2495 AliITSAlignMille2.cxx:2496 AliITSAlignMille2.cxx:2497 AliITSAlignMille2.cxx:2498 AliITSAlignMille2.cxx:2499 AliITSAlignMille2.cxx:2500 AliITSAlignMille2.cxx:2501 AliITSAlignMille2.cxx:2502 AliITSAlignMille2.cxx:2503 AliITSAlignMille2.cxx:2504 AliITSAlignMille2.cxx:2505 AliITSAlignMille2.cxx:2506 AliITSAlignMille2.cxx:2507 AliITSAlignMille2.cxx:2508 AliITSAlignMille2.cxx:2509 AliITSAlignMille2.cxx:2510 AliITSAlignMille2.cxx:2511 AliITSAlignMille2.cxx:2512 AliITSAlignMille2.cxx:2513 AliITSAlignMille2.cxx:2514 AliITSAlignMille2.cxx:2515 AliITSAlignMille2.cxx:2516 AliITSAlignMille2.cxx:2517 AliITSAlignMille2.cxx:2518 AliITSAlignMille2.cxx:2519 AliITSAlignMille2.cxx:2520 AliITSAlignMille2.cxx:2521 AliITSAlignMille2.cxx:2522 AliITSAlignMille2.cxx:2523 AliITSAlignMille2.cxx:2524 AliITSAlignMille2.cxx:2525 AliITSAlignMille2.cxx:2526 AliITSAlignMille2.cxx:2527 AliITSAlignMille2.cxx:2528 AliITSAlignMille2.cxx:2529 AliITSAlignMille2.cxx:2530 AliITSAlignMille2.cxx:2531 AliITSAlignMille2.cxx:2532 AliITSAlignMille2.cxx:2533 AliITSAlignMille2.cxx:2534 AliITSAlignMille2.cxx:2535 AliITSAlignMille2.cxx:2536 AliITSAlignMille2.cxx:2537 AliITSAlignMille2.cxx:2538 AliITSAlignMille2.cxx:2539 AliITSAlignMille2.cxx:2540 AliITSAlignMille2.cxx:2541 AliITSAlignMille2.cxx:2542 AliITSAlignMille2.cxx:2543 AliITSAlignMille2.cxx:2544 AliITSAlignMille2.cxx:2545 AliITSAlignMille2.cxx:2546 AliITSAlignMille2.cxx:2547 AliITSAlignMille2.cxx:2548 AliITSAlignMille2.cxx:2549 AliITSAlignMille2.cxx:2550 AliITSAlignMille2.cxx:2551 AliITSAlignMille2.cxx:2552 AliITSAlignMille2.cxx:2553 AliITSAlignMille2.cxx:2554 AliITSAlignMille2.cxx:2555 AliITSAlignMille2.cxx:2556 AliITSAlignMille2.cxx:2557 AliITSAlignMille2.cxx:2558 AliITSAlignMille2.cxx:2559 AliITSAlignMille2.cxx:2560 AliITSAlignMille2.cxx:2561 AliITSAlignMille2.cxx:2562 AliITSAlignMille2.cxx:2563 AliITSAlignMille2.cxx:2564 AliITSAlignMille2.cxx:2565 AliITSAlignMille2.cxx:2566 AliITSAlignMille2.cxx:2567 AliITSAlignMille2.cxx:2568 AliITSAlignMille2.cxx:2569 AliITSAlignMille2.cxx:2570 AliITSAlignMille2.cxx:2571 AliITSAlignMille2.cxx:2572 AliITSAlignMille2.cxx:2573 AliITSAlignMille2.cxx:2574 AliITSAlignMille2.cxx:2575 AliITSAlignMille2.cxx:2576 AliITSAlignMille2.cxx:2577 AliITSAlignMille2.cxx:2578 AliITSAlignMille2.cxx:2579 AliITSAlignMille2.cxx:2580 AliITSAlignMille2.cxx:2581 AliITSAlignMille2.cxx:2582 AliITSAlignMille2.cxx:2583 AliITSAlignMille2.cxx:2584 AliITSAlignMille2.cxx:2585 AliITSAlignMille2.cxx:2586 AliITSAlignMille2.cxx:2587 AliITSAlignMille2.cxx:2588 AliITSAlignMille2.cxx:2589 AliITSAlignMille2.cxx:2590 AliITSAlignMille2.cxx:2591 AliITSAlignMille2.cxx:2592 AliITSAlignMille2.cxx:2593 AliITSAlignMille2.cxx:2594 AliITSAlignMille2.cxx:2595 AliITSAlignMille2.cxx:2596 AliITSAlignMille2.cxx:2597 AliITSAlignMille2.cxx:2598 AliITSAlignMille2.cxx:2599 AliITSAlignMille2.cxx:2600 AliITSAlignMille2.cxx:2601 AliITSAlignMille2.cxx:2602 AliITSAlignMille2.cxx:2603 AliITSAlignMille2.cxx:2604 AliITSAlignMille2.cxx:2605 AliITSAlignMille2.cxx:2606 AliITSAlignMille2.cxx:2607 AliITSAlignMille2.cxx:2608 AliITSAlignMille2.cxx:2609 AliITSAlignMille2.cxx:2610 AliITSAlignMille2.cxx:2611 AliITSAlignMille2.cxx:2612 AliITSAlignMille2.cxx:2613 AliITSAlignMille2.cxx:2614 AliITSAlignMille2.cxx:2615 AliITSAlignMille2.cxx:2616 AliITSAlignMille2.cxx:2617 AliITSAlignMille2.cxx:2618 AliITSAlignMille2.cxx:2619 AliITSAlignMille2.cxx:2620 AliITSAlignMille2.cxx:2621 AliITSAlignMille2.cxx:2622 AliITSAlignMille2.cxx:2623 AliITSAlignMille2.cxx:2624 AliITSAlignMille2.cxx:2625 AliITSAlignMille2.cxx:2626 AliITSAlignMille2.cxx:2627 AliITSAlignMille2.cxx:2628 AliITSAlignMille2.cxx:2629 AliITSAlignMille2.cxx:2630 AliITSAlignMille2.cxx:2631 AliITSAlignMille2.cxx:2632 AliITSAlignMille2.cxx:2633 AliITSAlignMille2.cxx:2634 AliITSAlignMille2.cxx:2635 AliITSAlignMille2.cxx:2636 AliITSAlignMille2.cxx:2637 AliITSAlignMille2.cxx:2638 AliITSAlignMille2.cxx:2639 AliITSAlignMille2.cxx:2640 AliITSAlignMille2.cxx:2641 AliITSAlignMille2.cxx:2642 AliITSAlignMille2.cxx:2643 AliITSAlignMille2.cxx:2644 AliITSAlignMille2.cxx:2645 AliITSAlignMille2.cxx:2646 AliITSAlignMille2.cxx:2647 AliITSAlignMille2.cxx:2648 AliITSAlignMille2.cxx:2649 AliITSAlignMille2.cxx:2650 AliITSAlignMille2.cxx:2651 AliITSAlignMille2.cxx:2652 AliITSAlignMille2.cxx:2653 AliITSAlignMille2.cxx:2654 AliITSAlignMille2.cxx:2655 AliITSAlignMille2.cxx:2656 AliITSAlignMille2.cxx:2657 AliITSAlignMille2.cxx:2658 AliITSAlignMille2.cxx:2659 AliITSAlignMille2.cxx:2660 AliITSAlignMille2.cxx:2661 AliITSAlignMille2.cxx:2662 AliITSAlignMille2.cxx:2663 AliITSAlignMille2.cxx:2664 AliITSAlignMille2.cxx:2665 AliITSAlignMille2.cxx:2666 AliITSAlignMille2.cxx:2667 AliITSAlignMille2.cxx:2668 AliITSAlignMille2.cxx:2669 AliITSAlignMille2.cxx:2670 AliITSAlignMille2.cxx:2671 AliITSAlignMille2.cxx:2672 AliITSAlignMille2.cxx:2673 AliITSAlignMille2.cxx:2674 AliITSAlignMille2.cxx:2675 AliITSAlignMille2.cxx:2676 AliITSAlignMille2.cxx:2677 AliITSAlignMille2.cxx:2678 AliITSAlignMille2.cxx:2679 AliITSAlignMille2.cxx:2680 AliITSAlignMille2.cxx:2681 AliITSAlignMille2.cxx:2682 AliITSAlignMille2.cxx:2683 AliITSAlignMille2.cxx:2684 AliITSAlignMille2.cxx:2685 AliITSAlignMille2.cxx:2686 AliITSAlignMille2.cxx:2687 AliITSAlignMille2.cxx:2688 AliITSAlignMille2.cxx:2689 AliITSAlignMille2.cxx:2690 AliITSAlignMille2.cxx:2691 AliITSAlignMille2.cxx:2692 AliITSAlignMille2.cxx:2693 AliITSAlignMille2.cxx:2694 AliITSAlignMille2.cxx:2695 AliITSAlignMille2.cxx:2696 AliITSAlignMille2.cxx:2697 AliITSAlignMille2.cxx:2698 AliITSAlignMille2.cxx:2699 AliITSAlignMille2.cxx:2700 AliITSAlignMille2.cxx:2701 AliITSAlignMille2.cxx:2702 AliITSAlignMille2.cxx:2703 AliITSAlignMille2.cxx:2704 AliITSAlignMille2.cxx:2705 AliITSAlignMille2.cxx:2706 AliITSAlignMille2.cxx:2707 AliITSAlignMille2.cxx:2708 AliITSAlignMille2.cxx:2709 AliITSAlignMille2.cxx:2710 AliITSAlignMille2.cxx:2711 AliITSAlignMille2.cxx:2712 AliITSAlignMille2.cxx:2713 AliITSAlignMille2.cxx:2714 AliITSAlignMille2.cxx:2715 AliITSAlignMille2.cxx:2716 AliITSAlignMille2.cxx:2717 AliITSAlignMille2.cxx:2718 AliITSAlignMille2.cxx:2719 AliITSAlignMille2.cxx:2720 AliITSAlignMille2.cxx:2721 AliITSAlignMille2.cxx:2722 AliITSAlignMille2.cxx:2723 AliITSAlignMille2.cxx:2724 AliITSAlignMille2.cxx:2725 AliITSAlignMille2.cxx:2726 AliITSAlignMille2.cxx:2727 AliITSAlignMille2.cxx:2728 AliITSAlignMille2.cxx:2729 AliITSAlignMille2.cxx:2730 AliITSAlignMille2.cxx:2731 AliITSAlignMille2.cxx:2732 AliITSAlignMille2.cxx:2733 AliITSAlignMille2.cxx:2734 AliITSAlignMille2.cxx:2735 AliITSAlignMille2.cxx:2736 AliITSAlignMille2.cxx:2737 AliITSAlignMille2.cxx:2738 AliITSAlignMille2.cxx:2739 AliITSAlignMille2.cxx:2740 AliITSAlignMille2.cxx:2741 AliITSAlignMille2.cxx:2742 AliITSAlignMille2.cxx:2743 AliITSAlignMille2.cxx:2744 AliITSAlignMille2.cxx:2745 AliITSAlignMille2.cxx:2746 AliITSAlignMille2.cxx:2747 AliITSAlignMille2.cxx:2748 AliITSAlignMille2.cxx:2749 AliITSAlignMille2.cxx:2750 AliITSAlignMille2.cxx:2751 AliITSAlignMille2.cxx:2752 AliITSAlignMille2.cxx:2753 AliITSAlignMille2.cxx:2754 AliITSAlignMille2.cxx:2755 AliITSAlignMille2.cxx:2756 AliITSAlignMille2.cxx:2757 AliITSAlignMille2.cxx:2758 AliITSAlignMille2.cxx:2759 AliITSAlignMille2.cxx:2760 AliITSAlignMille2.cxx:2761 AliITSAlignMille2.cxx:2762 AliITSAlignMille2.cxx:2763 AliITSAlignMille2.cxx:2764 AliITSAlignMille2.cxx:2765 AliITSAlignMille2.cxx:2766 AliITSAlignMille2.cxx:2767 AliITSAlignMille2.cxx:2768 AliITSAlignMille2.cxx:2769 AliITSAlignMille2.cxx:2770 AliITSAlignMille2.cxx:2771 AliITSAlignMille2.cxx:2772 AliITSAlignMille2.cxx:2773 AliITSAlignMille2.cxx:2774 AliITSAlignMille2.cxx:2775 AliITSAlignMille2.cxx:2776 AliITSAlignMille2.cxx:2777 AliITSAlignMille2.cxx:2778 AliITSAlignMille2.cxx:2779 AliITSAlignMille2.cxx:2780 AliITSAlignMille2.cxx:2781 AliITSAlignMille2.cxx:2782 AliITSAlignMille2.cxx:2783 AliITSAlignMille2.cxx:2784 AliITSAlignMille2.cxx:2785 AliITSAlignMille2.cxx:2786 AliITSAlignMille2.cxx:2787 AliITSAlignMille2.cxx:2788 AliITSAlignMille2.cxx:2789 AliITSAlignMille2.cxx:2790 AliITSAlignMille2.cxx:2791 AliITSAlignMille2.cxx:2792 AliITSAlignMille2.cxx:2793 AliITSAlignMille2.cxx:2794 AliITSAlignMille2.cxx:2795 AliITSAlignMille2.cxx:2796 AliITSAlignMille2.cxx:2797 AliITSAlignMille2.cxx:2798 AliITSAlignMille2.cxx:2799 AliITSAlignMille2.cxx:2800 AliITSAlignMille2.cxx:2801 AliITSAlignMille2.cxx:2802 AliITSAlignMille2.cxx:2803 AliITSAlignMille2.cxx:2804 AliITSAlignMille2.cxx:2805 AliITSAlignMille2.cxx:2806 AliITSAlignMille2.cxx:2807 AliITSAlignMille2.cxx:2808 AliITSAlignMille2.cxx:2809 AliITSAlignMille2.cxx:2810 AliITSAlignMille2.cxx:2811 AliITSAlignMille2.cxx:2812 AliITSAlignMille2.cxx:2813 AliITSAlignMille2.cxx:2814 AliITSAlignMille2.cxx:2815 AliITSAlignMille2.cxx:2816 AliITSAlignMille2.cxx:2817 AliITSAlignMille2.cxx:2818 AliITSAlignMille2.cxx:2819 AliITSAlignMille2.cxx:2820 AliITSAlignMille2.cxx:2821 AliITSAlignMille2.cxx:2822 AliITSAlignMille2.cxx:2823 AliITSAlignMille2.cxx:2824 AliITSAlignMille2.cxx:2825 AliITSAlignMille2.cxx:2826 AliITSAlignMille2.cxx:2827 AliITSAlignMille2.cxx:2828 AliITSAlignMille2.cxx:2829 AliITSAlignMille2.cxx:2830 AliITSAlignMille2.cxx:2831 AliITSAlignMille2.cxx:2832 AliITSAlignMille2.cxx:2833 AliITSAlignMille2.cxx:2834 AliITSAlignMille2.cxx:2835 AliITSAlignMille2.cxx:2836 AliITSAlignMille2.cxx:2837 AliITSAlignMille2.cxx:2838 AliITSAlignMille2.cxx:2839 AliITSAlignMille2.cxx:2840 AliITSAlignMille2.cxx:2841 AliITSAlignMille2.cxx:2842 AliITSAlignMille2.cxx:2843 AliITSAlignMille2.cxx:2844 AliITSAlignMille2.cxx:2845 AliITSAlignMille2.cxx:2846 AliITSAlignMille2.cxx:2847 AliITSAlignMille2.cxx:2848 AliITSAlignMille2.cxx:2849 AliITSAlignMille2.cxx:2850 AliITSAlignMille2.cxx:2851 AliITSAlignMille2.cxx:2852 AliITSAlignMille2.cxx:2853 AliITSAlignMille2.cxx:2854 AliITSAlignMille2.cxx:2855 AliITSAlignMille2.cxx:2856 AliITSAlignMille2.cxx:2857 AliITSAlignMille2.cxx:2858 AliITSAlignMille2.cxx:2859 AliITSAlignMille2.cxx:2860 AliITSAlignMille2.cxx:2861 AliITSAlignMille2.cxx:2862 AliITSAlignMille2.cxx:2863 AliITSAlignMille2.cxx:2864 AliITSAlignMille2.cxx:2865 AliITSAlignMille2.cxx:2866 AliITSAlignMille2.cxx:2867 AliITSAlignMille2.cxx:2868 AliITSAlignMille2.cxx:2869 AliITSAlignMille2.cxx:2870 AliITSAlignMille2.cxx:2871 AliITSAlignMille2.cxx:2872 AliITSAlignMille2.cxx:2873 AliITSAlignMille2.cxx:2874 AliITSAlignMille2.cxx:2875 AliITSAlignMille2.cxx:2876 AliITSAlignMille2.cxx:2877 AliITSAlignMille2.cxx:2878 AliITSAlignMille2.cxx:2879 AliITSAlignMille2.cxx:2880 AliITSAlignMille2.cxx:2881 AliITSAlignMille2.cxx:2882 AliITSAlignMille2.cxx:2883 AliITSAlignMille2.cxx:2884 AliITSAlignMille2.cxx:2885 AliITSAlignMille2.cxx:2886 AliITSAlignMille2.cxx:2887 AliITSAlignMille2.cxx:2888 AliITSAlignMille2.cxx:2889 AliITSAlignMille2.cxx:2890 AliITSAlignMille2.cxx:2891 AliITSAlignMille2.cxx:2892 AliITSAlignMille2.cxx:2893 AliITSAlignMille2.cxx:2894 AliITSAlignMille2.cxx:2895 AliITSAlignMille2.cxx:2896 AliITSAlignMille2.cxx:2897 AliITSAlignMille2.cxx:2898 AliITSAlignMille2.cxx:2899 AliITSAlignMille2.cxx:2900 AliITSAlignMille2.cxx:2901 AliITSAlignMille2.cxx:2902 AliITSAlignMille2.cxx:2903 AliITSAlignMille2.cxx:2904 AliITSAlignMille2.cxx:2905 AliITSAlignMille2.cxx:2906 AliITSAlignMille2.cxx:2907 AliITSAlignMille2.cxx:2908 AliITSAlignMille2.cxx:2909 AliITSAlignMille2.cxx:2910 AliITSAlignMille2.cxx:2911 AliITSAlignMille2.cxx:2912 AliITSAlignMille2.cxx:2913 AliITSAlignMille2.cxx:2914 AliITSAlignMille2.cxx:2915 AliITSAlignMille2.cxx:2916 AliITSAlignMille2.cxx:2917 AliITSAlignMille2.cxx:2918 AliITSAlignMille2.cxx:2919 AliITSAlignMille2.cxx:2920 AliITSAlignMille2.cxx:2921 AliITSAlignMille2.cxx:2922 AliITSAlignMille2.cxx:2923 AliITSAlignMille2.cxx:2924 AliITSAlignMille2.cxx:2925 AliITSAlignMille2.cxx:2926 AliITSAlignMille2.cxx:2927 AliITSAlignMille2.cxx:2928 AliITSAlignMille2.cxx:2929 AliITSAlignMille2.cxx:2930 AliITSAlignMille2.cxx:2931 AliITSAlignMille2.cxx:2932 AliITSAlignMille2.cxx:2933 AliITSAlignMille2.cxx:2934 AliITSAlignMille2.cxx:2935 AliITSAlignMille2.cxx:2936 AliITSAlignMille2.cxx:2937 AliITSAlignMille2.cxx:2938 AliITSAlignMille2.cxx:2939 AliITSAlignMille2.cxx:2940 AliITSAlignMille2.cxx:2941 AliITSAlignMille2.cxx:2942 AliITSAlignMille2.cxx:2943 AliITSAlignMille2.cxx:2944 AliITSAlignMille2.cxx:2945 AliITSAlignMille2.cxx:2946 AliITSAlignMille2.cxx:2947 AliITSAlignMille2.cxx:2948 AliITSAlignMille2.cxx:2949 AliITSAlignMille2.cxx:2950 AliITSAlignMille2.cxx:2951 AliITSAlignMille2.cxx:2952 AliITSAlignMille2.cxx:2953 AliITSAlignMille2.cxx:2954 AliITSAlignMille2.cxx:2955 AliITSAlignMille2.cxx:2956 AliITSAlignMille2.cxx:2957 AliITSAlignMille2.cxx:2958 AliITSAlignMille2.cxx:2959 AliITSAlignMille2.cxx:2960 AliITSAlignMille2.cxx:2961 AliITSAlignMille2.cxx:2962 AliITSAlignMille2.cxx:2963 AliITSAlignMille2.cxx:2964 AliITSAlignMille2.cxx:2965 AliITSAlignMille2.cxx:2966 AliITSAlignMille2.cxx:2967 AliITSAlignMille2.cxx:2968 AliITSAlignMille2.cxx:2969 AliITSAlignMille2.cxx:2970 AliITSAlignMille2.cxx:2971 AliITSAlignMille2.cxx:2972 AliITSAlignMille2.cxx:2973 AliITSAlignMille2.cxx:2974 AliITSAlignMille2.cxx:2975 AliITSAlignMille2.cxx:2976 AliITSAlignMille2.cxx:2977 AliITSAlignMille2.cxx:2978 AliITSAlignMille2.cxx:2979 AliITSAlignMille2.cxx:2980 AliITSAlignMille2.cxx:2981 AliITSAlignMille2.cxx:2982 AliITSAlignMille2.cxx:2983 AliITSAlignMille2.cxx:2984 AliITSAlignMille2.cxx:2985 AliITSAlignMille2.cxx:2986 AliITSAlignMille2.cxx:2987 AliITSAlignMille2.cxx:2988 AliITSAlignMille2.cxx:2989 AliITSAlignMille2.cxx:2990 AliITSAlignMille2.cxx:2991 AliITSAlignMille2.cxx:2992 AliITSAlignMille2.cxx:2993 AliITSAlignMille2.cxx:2994 AliITSAlignMille2.cxx:2995 AliITSAlignMille2.cxx:2996 AliITSAlignMille2.cxx:2997 AliITSAlignMille2.cxx:2998 AliITSAlignMille2.cxx:2999 AliITSAlignMille2.cxx:3000 AliITSAlignMille2.cxx:3001 AliITSAlignMille2.cxx:3002 AliITSAlignMille2.cxx:3003 AliITSAlignMille2.cxx:3004 AliITSAlignMille2.cxx:3005 AliITSAlignMille2.cxx:3006 AliITSAlignMille2.cxx:3007 AliITSAlignMille2.cxx:3008 AliITSAlignMille2.cxx:3009 AliITSAlignMille2.cxx:3010 AliITSAlignMille2.cxx:3011 AliITSAlignMille2.cxx:3012 AliITSAlignMille2.cxx:3013 AliITSAlignMille2.cxx:3014 AliITSAlignMille2.cxx:3015 AliITSAlignMille2.cxx:3016 AliITSAlignMille2.cxx:3017 AliITSAlignMille2.cxx:3018 AliITSAlignMille2.cxx:3019 AliITSAlignMille2.cxx:3020 AliITSAlignMille2.cxx:3021 AliITSAlignMille2.cxx:3022 AliITSAlignMille2.cxx:3023 AliITSAlignMille2.cxx:3024 AliITSAlignMille2.cxx:3025 AliITSAlignMille2.cxx:3026 AliITSAlignMille2.cxx:3027 AliITSAlignMille2.cxx:3028 AliITSAlignMille2.cxx:3029 AliITSAlignMille2.cxx:3030 AliITSAlignMille2.cxx:3031 AliITSAlignMille2.cxx:3032 AliITSAlignMille2.cxx:3033 AliITSAlignMille2.cxx:3034 AliITSAlignMille2.cxx:3035 AliITSAlignMille2.cxx:3036 AliITSAlignMille2.cxx:3037 AliITSAlignMille2.cxx:3038 AliITSAlignMille2.cxx:3039 AliITSAlignMille2.cxx:3040 AliITSAlignMille2.cxx:3041 AliITSAlignMille2.cxx:3042 AliITSAlignMille2.cxx:3043 AliITSAlignMille2.cxx:3044 AliITSAlignMille2.cxx:3045 AliITSAlignMille2.cxx:3046 AliITSAlignMille2.cxx:3047 AliITSAlignMille2.cxx:3048 AliITSAlignMille2.cxx:3049 AliITSAlignMille2.cxx:3050 AliITSAlignMille2.cxx:3051 AliITSAlignMille2.cxx:3052 AliITSAlignMille2.cxx:3053 AliITSAlignMille2.cxx:3054 AliITSAlignMille2.cxx:3055 AliITSAlignMille2.cxx:3056 AliITSAlignMille2.cxx:3057 AliITSAlignMille2.cxx:3058 AliITSAlignMille2.cxx:3059 AliITSAlignMille2.cxx:3060 AliITSAlignMille2.cxx:3061 AliITSAlignMille2.cxx:3062 AliITSAlignMille2.cxx:3063 AliITSAlignMille2.cxx:3064 AliITSAlignMille2.cxx:3065 AliITSAlignMille2.cxx:3066 AliITSAlignMille2.cxx:3067 AliITSAlignMille2.cxx:3068 AliITSAlignMille2.cxx:3069 AliITSAlignMille2.cxx:3070 AliITSAlignMille2.cxx:3071 AliITSAlignMille2.cxx:3072 AliITSAlignMille2.cxx:3073 AliITSAlignMille2.cxx:3074 AliITSAlignMille2.cxx:3075 AliITSAlignMille2.cxx:3076 AliITSAlignMille2.cxx:3077 AliITSAlignMille2.cxx:3078 AliITSAlignMille2.cxx:3079 AliITSAlignMille2.cxx:3080 AliITSAlignMille2.cxx:3081 AliITSAlignMille2.cxx:3082 AliITSAlignMille2.cxx:3083 AliITSAlignMille2.cxx:3084 AliITSAlignMille2.cxx:3085 AliITSAlignMille2.cxx:3086 AliITSAlignMille2.cxx:3087 AliITSAlignMille2.cxx:3088 AliITSAlignMille2.cxx:3089 AliITSAlignMille2.cxx:3090 AliITSAlignMille2.cxx:3091 AliITSAlignMille2.cxx:3092 AliITSAlignMille2.cxx:3093 AliITSAlignMille2.cxx:3094 AliITSAlignMille2.cxx:3095 AliITSAlignMille2.cxx:3096 AliITSAlignMille2.cxx:3097 AliITSAlignMille2.cxx:3098 AliITSAlignMille2.cxx:3099 AliITSAlignMille2.cxx:3100 AliITSAlignMille2.cxx:3101 AliITSAlignMille2.cxx:3102 AliITSAlignMille2.cxx:3103 AliITSAlignMille2.cxx:3104 AliITSAlignMille2.cxx:3105 AliITSAlignMille2.cxx:3106 AliITSAlignMille2.cxx:3107 AliITSAlignMille2.cxx:3108 AliITSAlignMille2.cxx:3109 AliITSAlignMille2.cxx:3110 AliITSAlignMille2.cxx:3111 AliITSAlignMille2.cxx:3112 AliITSAlignMille2.cxx:3113 AliITSAlignMille2.cxx:3114 AliITSAlignMille2.cxx:3115 AliITSAlignMille2.cxx:3116 AliITSAlignMille2.cxx:3117 AliITSAlignMille2.cxx:3118 AliITSAlignMille2.cxx:3119 AliITSAlignMille2.cxx:3120 AliITSAlignMille2.cxx:3121 AliITSAlignMille2.cxx:3122 AliITSAlignMille2.cxx:3123 AliITSAlignMille2.cxx:3124 AliITSAlignMille2.cxx:3125 AliITSAlignMille2.cxx:3126 AliITSAlignMille2.cxx:3127 AliITSAlignMille2.cxx:3128 AliITSAlignMille2.cxx:3129 AliITSAlignMille2.cxx:3130 AliITSAlignMille2.cxx:3131 AliITSAlignMille2.cxx:3132 AliITSAlignMille2.cxx:3133 AliITSAlignMille2.cxx:3134 AliITSAlignMille2.cxx:3135 AliITSAlignMille2.cxx:3136 AliITSAlignMille2.cxx:3137 AliITSAlignMille2.cxx:3138 AliITSAlignMille2.cxx:3139 AliITSAlignMille2.cxx:3140 AliITSAlignMille2.cxx:3141 AliITSAlignMille2.cxx:3142 AliITSAlignMille2.cxx:3143 AliITSAlignMille2.cxx:3144 AliITSAlignMille2.cxx:3145 AliITSAlignMille2.cxx:3146 AliITSAlignMille2.cxx:3147 AliITSAlignMille2.cxx:3148 AliITSAlignMille2.cxx:3149 AliITSAlignMille2.cxx:3150 AliITSAlignMille2.cxx:3151 AliITSAlignMille2.cxx:3152 AliITSAlignMille2.cxx:3153 AliITSAlignMille2.cxx:3154 AliITSAlignMille2.cxx:3155 AliITSAlignMille2.cxx:3156 AliITSAlignMille2.cxx:3157 AliITSAlignMille2.cxx:3158 AliITSAlignMille2.cxx:3159 AliITSAlignMille2.cxx:3160 AliITSAlignMille2.cxx:3161 AliITSAlignMille2.cxx:3162 AliITSAlignMille2.cxx:3163 AliITSAlignMille2.cxx:3164 AliITSAlignMille2.cxx:3165 AliITSAlignMille2.cxx:3166 AliITSAlignMille2.cxx:3167 AliITSAlignMille2.cxx:3168 AliITSAlignMille2.cxx:3169 AliITSAlignMille2.cxx:3170 AliITSAlignMille2.cxx:3171 AliITSAlignMille2.cxx:3172 AliITSAlignMille2.cxx:3173 AliITSAlignMille2.cxx:3174 AliITSAlignMille2.cxx:3175 AliITSAlignMille2.cxx:3176 AliITSAlignMille2.cxx:3177 AliITSAlignMille2.cxx:3178 AliITSAlignMille2.cxx:3179 AliITSAlignMille2.cxx:3180 AliITSAlignMille2.cxx:3181 AliITSAlignMille2.cxx:3182 AliITSAlignMille2.cxx:3183 AliITSAlignMille2.cxx:3184 AliITSAlignMille2.cxx:3185 AliITSAlignMille2.cxx:3186 AliITSAlignMille2.cxx:3187 AliITSAlignMille2.cxx:3188 AliITSAlignMille2.cxx:3189 AliITSAlignMille2.cxx:3190 AliITSAlignMille2.cxx:3191 AliITSAlignMille2.cxx:3192 AliITSAlignMille2.cxx:3193 AliITSAlignMille2.cxx:3194 AliITSAlignMille2.cxx:3195 AliITSAlignMille2.cxx:3196 AliITSAlignMille2.cxx:3197 AliITSAlignMille2.cxx:3198 AliITSAlignMille2.cxx:3199 AliITSAlignMille2.cxx:3200 AliITSAlignMille2.cxx:3201 AliITSAlignMille2.cxx:3202 AliITSAlignMille2.cxx:3203 AliITSAlignMille2.cxx:3204 AliITSAlignMille2.cxx:3205 AliITSAlignMille2.cxx:3206 AliITSAlignMille2.cxx:3207 AliITSAlignMille2.cxx:3208 AliITSAlignMille2.cxx:3209 AliITSAlignMille2.cxx:3210 AliITSAlignMille2.cxx:3211 AliITSAlignMille2.cxx:3212 AliITSAlignMille2.cxx:3213 AliITSAlignMille2.cxx:3214 AliITSAlignMille2.cxx:3215 AliITSAlignMille2.cxx:3216 AliITSAlignMille2.cxx:3217 AliITSAlignMille2.cxx:3218 AliITSAlignMille2.cxx:3219 AliITSAlignMille2.cxx:3220 AliITSAlignMille2.cxx:3221 AliITSAlignMille2.cxx:3222 AliITSAlignMille2.cxx:3223 AliITSAlignMille2.cxx:3224 AliITSAlignMille2.cxx:3225 AliITSAlignMille2.cxx:3226 AliITSAlignMille2.cxx:3227 AliITSAlignMille2.cxx:3228 AliITSAlignMille2.cxx:3229 AliITSAlignMille2.cxx:3230 AliITSAlignMille2.cxx:3231 AliITSAlignMille2.cxx:3232 AliITSAlignMille2.cxx:3233 AliITSAlignMille2.cxx:3234 AliITSAlignMille2.cxx:3235 AliITSAlignMille2.cxx:3236 AliITSAlignMille2.cxx:3237 AliITSAlignMille2.cxx:3238 AliITSAlignMille2.cxx:3239 AliITSAlignMille2.cxx:3240 AliITSAlignMille2.cxx:3241 AliITSAlignMille2.cxx:3242 AliITSAlignMille2.cxx:3243 AliITSAlignMille2.cxx:3244 AliITSAlignMille2.cxx:3245 AliITSAlignMille2.cxx:3246 AliITSAlignMille2.cxx:3247 AliITSAlignMille2.cxx:3248 AliITSAlignMille2.cxx:3249 AliITSAlignMille2.cxx:3250 AliITSAlignMille2.cxx:3251 AliITSAlignMille2.cxx:3252 AliITSAlignMille2.cxx:3253 AliITSAlignMille2.cxx:3254 AliITSAlignMille2.cxx:3255 AliITSAlignMille2.cxx:3256 AliITSAlignMille2.cxx:3257 AliITSAlignMille2.cxx:3258 AliITSAlignMille2.cxx:3259 AliITSAlignMille2.cxx:3260 AliITSAlignMille2.cxx:3261 AliITSAlignMille2.cxx:3262 AliITSAlignMille2.cxx:3263 AliITSAlignMille2.cxx:3264 AliITSAlignMille2.cxx:3265 AliITSAlignMille2.cxx:3266 AliITSAlignMille2.cxx:3267 AliITSAlignMille2.cxx:3268 AliITSAlignMille2.cxx:3269 AliITSAlignMille2.cxx:3270 AliITSAlignMille2.cxx:3271 AliITSAlignMille2.cxx:3272 AliITSAlignMille2.cxx:3273 AliITSAlignMille2.cxx:3274 AliITSAlignMille2.cxx:3275 AliITSAlignMille2.cxx:3276 AliITSAlignMille2.cxx:3277 AliITSAlignMille2.cxx:3278 AliITSAlignMille2.cxx:3279 AliITSAlignMille2.cxx:3280 AliITSAlignMille2.cxx:3281 AliITSAlignMille2.cxx:3282 AliITSAlignMille2.cxx:3283 AliITSAlignMille2.cxx:3284 AliITSAlignMille2.cxx:3285 AliITSAlignMille2.cxx:3286 AliITSAlignMille2.cxx:3287 AliITSAlignMille2.cxx:3288 AliITSAlignMille2.cxx:3289 AliITSAlignMille2.cxx:3290 AliITSAlignMille2.cxx:3291 AliITSAlignMille2.cxx:3292 AliITSAlignMille2.cxx:3293 AliITSAlignMille2.cxx:3294 AliITSAlignMille2.cxx:3295 AliITSAlignMille2.cxx:3296 AliITSAlignMille2.cxx:3297 AliITSAlignMille2.cxx:3298 AliITSAlignMille2.cxx:3299 AliITSAlignMille2.cxx:3300 AliITSAlignMille2.cxx:3301 AliITSAlignMille2.cxx:3302 AliITSAlignMille2.cxx:3303 AliITSAlignMille2.cxx:3304 AliITSAlignMille2.cxx:3305 AliITSAlignMille2.cxx:3306 AliITSAlignMille2.cxx:3307 AliITSAlignMille2.cxx:3308 AliITSAlignMille2.cxx:3309 AliITSAlignMille2.cxx:3310 AliITSAlignMille2.cxx:3311 AliITSAlignMille2.cxx:3312 AliITSAlignMille2.cxx:3313 AliITSAlignMille2.cxx:3314 AliITSAlignMille2.cxx:3315 AliITSAlignMille2.cxx:3316 AliITSAlignMille2.cxx:3317 AliITSAlignMille2.cxx:3318 AliITSAlignMille2.cxx:3319 AliITSAlignMille2.cxx:3320 AliITSAlignMille2.cxx:3321 AliITSAlignMille2.cxx:3322 AliITSAlignMille2.cxx:3323 AliITSAlignMille2.cxx:3324 AliITSAlignMille2.cxx:3325 AliITSAlignMille2.cxx:3326 AliITSAlignMille2.cxx:3327 AliITSAlignMille2.cxx:3328 AliITSAlignMille2.cxx:3329 AliITSAlignMille2.cxx:3330 AliITSAlignMille2.cxx:3331 AliITSAlignMille2.cxx:3332 AliITSAlignMille2.cxx:3333 AliITSAlignMille2.cxx:3334 AliITSAlignMille2.cxx:3335 AliITSAlignMille2.cxx:3336 AliITSAlignMille2.cxx:3337 AliITSAlignMille2.cxx:3338 AliITSAlignMille2.cxx:3339 AliITSAlignMille2.cxx:3340 AliITSAlignMille2.cxx:3341 AliITSAlignMille2.cxx:3342 AliITSAlignMille2.cxx:3343 AliITSAlignMille2.cxx:3344 AliITSAlignMille2.cxx:3345 AliITSAlignMille2.cxx:3346 AliITSAlignMille2.cxx:3347 AliITSAlignMille2.cxx:3348 AliITSAlignMille2.cxx:3349 AliITSAlignMille2.cxx:3350 AliITSAlignMille2.cxx:3351 AliITSAlignMille2.cxx:3352 AliITSAlignMille2.cxx:3353 AliITSAlignMille2.cxx:3354 AliITSAlignMille2.cxx:3355 AliITSAlignMille2.cxx:3356 AliITSAlignMille2.cxx:3357 AliITSAlignMille2.cxx:3358 AliITSAlignMille2.cxx:3359 AliITSAlignMille2.cxx:3360 AliITSAlignMille2.cxx:3361 AliITSAlignMille2.cxx:3362 AliITSAlignMille2.cxx:3363 AliITSAlignMille2.cxx:3364 AliITSAlignMille2.cxx:3365 AliITSAlignMille2.cxx:3366 AliITSAlignMille2.cxx:3367 AliITSAlignMille2.cxx:3368 AliITSAlignMille2.cxx:3369 AliITSAlignMille2.cxx:3370 AliITSAlignMille2.cxx:3371 AliITSAlignMille2.cxx:3372 AliITSAlignMille2.cxx:3373 AliITSAlignMille2.cxx:3374 AliITSAlignMille2.cxx:3375 AliITSAlignMille2.cxx:3376 AliITSAlignMille2.cxx:3377 AliITSAlignMille2.cxx:3378 AliITSAlignMille2.cxx:3379 AliITSAlignMille2.cxx:3380 AliITSAlignMille2.cxx:3381 AliITSAlignMille2.cxx:3382 AliITSAlignMille2.cxx:3383 AliITSAlignMille2.cxx:3384 AliITSAlignMille2.cxx:3385 AliITSAlignMille2.cxx:3386 AliITSAlignMille2.cxx:3387 AliITSAlignMille2.cxx:3388 AliITSAlignMille2.cxx:3389 AliITSAlignMille2.cxx:3390 AliITSAlignMille2.cxx:3391 AliITSAlignMille2.cxx:3392 AliITSAlignMille2.cxx:3393 AliITSAlignMille2.cxx:3394 AliITSAlignMille2.cxx:3395 AliITSAlignMille2.cxx:3396 AliITSAlignMille2.cxx:3397 AliITSAlignMille2.cxx:3398 AliITSAlignMille2.cxx:3399 AliITSAlignMille2.cxx:3400 AliITSAlignMille2.cxx:3401 AliITSAlignMille2.cxx:3402 AliITSAlignMille2.cxx:3403 AliITSAlignMille2.cxx:3404 AliITSAlignMille2.cxx:3405 AliITSAlignMille2.cxx:3406 AliITSAlignMille2.cxx:3407 AliITSAlignMille2.cxx:3408 AliITSAlignMille2.cxx:3409 AliITSAlignMille2.cxx:3410 AliITSAlignMille2.cxx:3411 AliITSAlignMille2.cxx:3412 AliITSAlignMille2.cxx:3413 AliITSAlignMille2.cxx:3414 AliITSAlignMille2.cxx:3415 AliITSAlignMille2.cxx:3416 AliITSAlignMille2.cxx:3417 AliITSAlignMille2.cxx:3418 AliITSAlignMille2.cxx:3419 AliITSAlignMille2.cxx:3420 AliITSAlignMille2.cxx:3421 AliITSAlignMille2.cxx:3422 AliITSAlignMille2.cxx:3423 AliITSAlignMille2.cxx:3424 AliITSAlignMille2.cxx:3425 AliITSAlignMille2.cxx:3426 AliITSAlignMille2.cxx:3427 AliITSAlignMille2.cxx:3428 AliITSAlignMille2.cxx:3429 AliITSAlignMille2.cxx:3430 AliITSAlignMille2.cxx:3431 AliITSAlignMille2.cxx:3432 AliITSAlignMille2.cxx:3433 AliITSAlignMille2.cxx:3434 AliITSAlignMille2.cxx:3435 AliITSAlignMille2.cxx:3436 AliITSAlignMille2.cxx:3437 AliITSAlignMille2.cxx:3438 AliITSAlignMille2.cxx:3439 AliITSAlignMille2.cxx:3440 AliITSAlignMille2.cxx:3441 AliITSAlignMille2.cxx:3442 AliITSAlignMille2.cxx:3443 AliITSAlignMille2.cxx:3444 AliITSAlignMille2.cxx:3445 AliITSAlignMille2.cxx:3446 AliITSAlignMille2.cxx:3447 AliITSAlignMille2.cxx:3448 AliITSAlignMille2.cxx:3449 AliITSAlignMille2.cxx:3450 AliITSAlignMille2.cxx:3451 AliITSAlignMille2.cxx:3452 AliITSAlignMille2.cxx:3453 AliITSAlignMille2.cxx:3454 AliITSAlignMille2.cxx:3455 AliITSAlignMille2.cxx:3456 AliITSAlignMille2.cxx:3457 AliITSAlignMille2.cxx:3458 AliITSAlignMille2.cxx:3459 AliITSAlignMille2.cxx:3460 AliITSAlignMille2.cxx:3461 AliITSAlignMille2.cxx:3462 AliITSAlignMille2.cxx:3463 AliITSAlignMille2.cxx:3464 AliITSAlignMille2.cxx:3465 AliITSAlignMille2.cxx:3466 AliITSAlignMille2.cxx:3467 AliITSAlignMille2.cxx:3468 AliITSAlignMille2.cxx:3469 AliITSAlignMille2.cxx:3470 AliITSAlignMille2.cxx:3471 AliITSAlignMille2.cxx:3472 AliITSAlignMille2.cxx:3473 AliITSAlignMille2.cxx:3474 AliITSAlignMille2.cxx:3475 AliITSAlignMille2.cxx:3476 AliITSAlignMille2.cxx:3477 AliITSAlignMille2.cxx:3478 AliITSAlignMille2.cxx:3479 AliITSAlignMille2.cxx:3480 AliITSAlignMille2.cxx:3481 AliITSAlignMille2.cxx:3482 AliITSAlignMille2.cxx:3483 AliITSAlignMille2.cxx:3484 AliITSAlignMille2.cxx:3485 AliITSAlignMille2.cxx:3486 AliITSAlignMille2.cxx:3487 AliITSAlignMille2.cxx:3488 AliITSAlignMille2.cxx:3489 AliITSAlignMille2.cxx:3490 AliITSAlignMille2.cxx:3491 AliITSAlignMille2.cxx:3492 AliITSAlignMille2.cxx:3493 AliITSAlignMille2.cxx:3494 AliITSAlignMille2.cxx:3495 AliITSAlignMille2.cxx:3496 AliITSAlignMille2.cxx:3497 AliITSAlignMille2.cxx:3498 AliITSAlignMille2.cxx:3499 AliITSAlignMille2.cxx:3500 AliITSAlignMille2.cxx:3501 AliITSAlignMille2.cxx:3502 AliITSAlignMille2.cxx:3503 AliITSAlignMille2.cxx:3504 AliITSAlignMille2.cxx:3505 AliITSAlignMille2.cxx:3506 AliITSAlignMille2.cxx:3507 AliITSAlignMille2.cxx:3508 AliITSAlignMille2.cxx:3509 AliITSAlignMille2.cxx:3510 AliITSAlignMille2.cxx:3511 AliITSAlignMille2.cxx:3512 AliITSAlignMille2.cxx:3513 AliITSAlignMille2.cxx:3514 AliITSAlignMille2.cxx:3515 AliITSAlignMille2.cxx:3516 AliITSAlignMille2.cxx:3517 AliITSAlignMille2.cxx:3518 AliITSAlignMille2.cxx:3519 AliITSAlignMille2.cxx:3520 AliITSAlignMille2.cxx:3521 AliITSAlignMille2.cxx:3522 AliITSAlignMille2.cxx:3523 AliITSAlignMille2.cxx:3524 AliITSAlignMille2.cxx:3525 AliITSAlignMille2.cxx:3526 AliITSAlignMille2.cxx:3527 AliITSAlignMille2.cxx:3528 AliITSAlignMille2.cxx:3529 AliITSAlignMille2.cxx:3530 AliITSAlignMille2.cxx:3531 AliITSAlignMille2.cxx:3532 AliITSAlignMille2.cxx:3533 AliITSAlignMille2.cxx:3534 AliITSAlignMille2.cxx:3535 AliITSAlignMille2.cxx:3536 AliITSAlignMille2.cxx:3537 AliITSAlignMille2.cxx:3538 AliITSAlignMille2.cxx:3539 AliITSAlignMille2.cxx:3540 AliITSAlignMille2.cxx:3541 AliITSAlignMille2.cxx:3542 AliITSAlignMille2.cxx:3543 AliITSAlignMille2.cxx:3544 AliITSAlignMille2.cxx:3545 AliITSAlignMille2.cxx:3546 AliITSAlignMille2.cxx:3547 AliITSAlignMille2.cxx:3548 AliITSAlignMille2.cxx:3549 AliITSAlignMille2.cxx:3550 AliITSAlignMille2.cxx:3551 AliITSAlignMille2.cxx:3552 AliITSAlignMille2.cxx:3553 AliITSAlignMille2.cxx:3554 AliITSAlignMille2.cxx:3555 AliITSAlignMille2.cxx:3556 AliITSAlignMille2.cxx:3557 AliITSAlignMille2.cxx:3558 AliITSAlignMille2.cxx:3559 AliITSAlignMille2.cxx:3560 AliITSAlignMille2.cxx:3561 AliITSAlignMille2.cxx:3562 AliITSAlignMille2.cxx:3563 AliITSAlignMille2.cxx:3564 AliITSAlignMille2.cxx:3565 AliITSAlignMille2.cxx:3566 AliITSAlignMille2.cxx:3567 AliITSAlignMille2.cxx:3568 AliITSAlignMille2.cxx:3569 AliITSAlignMille2.cxx:3570 AliITSAlignMille2.cxx:3571 AliITSAlignMille2.cxx:3572 AliITSAlignMille2.cxx:3573 AliITSAlignMille2.cxx:3574 AliITSAlignMille2.cxx:3575 AliITSAlignMille2.cxx:3576 AliITSAlignMille2.cxx:3577 AliITSAlignMille2.cxx:3578 AliITSAlignMille2.cxx:3579 AliITSAlignMille2.cxx:3580 AliITSAlignMille2.cxx:3581 AliITSAlignMille2.cxx:3582 AliITSAlignMille2.cxx:3583 AliITSAlignMille2.cxx:3584 AliITSAlignMille2.cxx:3585 AliITSAlignMille2.cxx:3586 AliITSAlignMille2.cxx:3587 AliITSAlignMille2.cxx:3588 AliITSAlignMille2.cxx:3589 AliITSAlignMille2.cxx:3590 AliITSAlignMille2.cxx:3591 AliITSAlignMille2.cxx:3592 AliITSAlignMille2.cxx:3593 AliITSAlignMille2.cxx:3594 AliITSAlignMille2.cxx:3595 AliITSAlignMille2.cxx:3596 AliITSAlignMille2.cxx:3597 AliITSAlignMille2.cxx:3598 AliITSAlignMille2.cxx:3599 AliITSAlignMille2.cxx:3600 AliITSAlignMille2.cxx:3601 AliITSAlignMille2.cxx:3602 AliITSAlignMille2.cxx:3603 AliITSAlignMille2.cxx:3604 AliITSAlignMille2.cxx:3605 AliITSAlignMille2.cxx:3606 AliITSAlignMille2.cxx:3607 AliITSAlignMille2.cxx:3608 AliITSAlignMille2.cxx:3609 AliITSAlignMille2.cxx:3610 AliITSAlignMille2.cxx:3611 AliITSAlignMille2.cxx:3612 AliITSAlignMille2.cxx:3613 AliITSAlignMille2.cxx:3614 AliITSAlignMille2.cxx:3615 AliITSAlignMille2.cxx:3616 AliITSAlignMille2.cxx:3617 AliITSAlignMille2.cxx:3618 AliITSAlignMille2.cxx:3619 AliITSAlignMille2.cxx:3620 AliITSAlignMille2.cxx:3621 AliITSAlignMille2.cxx:3622 AliITSAlignMille2.cxx:3623 AliITSAlignMille2.cxx:3624 AliITSAlignMille2.cxx:3625 AliITSAlignMille2.cxx:3626 AliITSAlignMille2.cxx:3627 AliITSAlignMille2.cxx:3628 AliITSAlignMille2.cxx:3629 AliITSAlignMille2.cxx:3630 AliITSAlignMille2.cxx:3631 AliITSAlignMille2.cxx:3632 AliITSAlignMille2.cxx:3633 AliITSAlignMille2.cxx:3634 AliITSAlignMille2.cxx:3635 AliITSAlignMille2.cxx:3636 AliITSAlignMille2.cxx:3637 AliITSAlignMille2.cxx:3638 AliITSAlignMille2.cxx:3639 AliITSAlignMille2.cxx:3640 AliITSAlignMille2.cxx:3641 AliITSAlignMille2.cxx:3642 AliITSAlignMille2.cxx:3643 AliITSAlignMille2.cxx:3644 AliITSAlignMille2.cxx:3645 AliITSAlignMille2.cxx:3646 AliITSAlignMille2.cxx:3647 AliITSAlignMille2.cxx:3648 AliITSAlignMille2.cxx:3649 AliITSAlignMille2.cxx:3650 AliITSAlignMille2.cxx:3651 AliITSAlignMille2.cxx:3652 AliITSAlignMille2.cxx:3653 AliITSAlignMille2.cxx:3654 AliITSAlignMille2.cxx:3655 AliITSAlignMille2.cxx:3656 AliITSAlignMille2.cxx:3657 AliITSAlignMille2.cxx:3658 AliITSAlignMille2.cxx:3659 AliITSAlignMille2.cxx:3660 AliITSAlignMille2.cxx:3661 AliITSAlignMille2.cxx:3662 AliITSAlignMille2.cxx:3663 AliITSAlignMille2.cxx:3664 AliITSAlignMille2.cxx:3665 AliITSAlignMille2.cxx:3666 AliITSAlignMille2.cxx:3667 AliITSAlignMille2.cxx:3668 AliITSAlignMille2.cxx:3669 AliITSAlignMille2.cxx:3670 AliITSAlignMille2.cxx:3671 AliITSAlignMille2.cxx:3672 AliITSAlignMille2.cxx:3673 AliITSAlignMille2.cxx:3674 AliITSAlignMille2.cxx:3675 AliITSAlignMille2.cxx:3676 AliITSAlignMille2.cxx:3677 AliITSAlignMille2.cxx:3678 AliITSAlignMille2.cxx:3679 AliITSAlignMille2.cxx:3680 AliITSAlignMille2.cxx:3681 AliITSAlignMille2.cxx:3682 AliITSAlignMille2.cxx:3683 AliITSAlignMille2.cxx:3684 AliITSAlignMille2.cxx:3685 AliITSAlignMille2.cxx:3686 AliITSAlignMille2.cxx:3687 AliITSAlignMille2.cxx:3688 AliITSAlignMille2.cxx:3689 AliITSAlignMille2.cxx:3690 AliITSAlignMille2.cxx:3691 AliITSAlignMille2.cxx:3692 AliITSAlignMille2.cxx:3693 AliITSAlignMille2.cxx:3694 AliITSAlignMille2.cxx:3695 AliITSAlignMille2.cxx:3696 AliITSAlignMille2.cxx:3697 AliITSAlignMille2.cxx:3698 AliITSAlignMille2.cxx:3699 AliITSAlignMille2.cxx:3700 AliITSAlignMille2.cxx:3701 AliITSAlignMille2.cxx:3702 AliITSAlignMille2.cxx:3703 AliITSAlignMille2.cxx:3704 AliITSAlignMille2.cxx:3705 AliITSAlignMille2.cxx:3706 AliITSAlignMille2.cxx:3707 AliITSAlignMille2.cxx:3708 AliITSAlignMille2.cxx:3709 AliITSAlignMille2.cxx:3710 AliITSAlignMille2.cxx:3711 AliITSAlignMille2.cxx:3712 AliITSAlignMille2.cxx:3713 AliITSAlignMille2.cxx:3714 AliITSAlignMille2.cxx:3715 AliITSAlignMille2.cxx:3716 AliITSAlignMille2.cxx:3717 AliITSAlignMille2.cxx:3718 AliITSAlignMille2.cxx:3719 AliITSAlignMille2.cxx:3720 AliITSAlignMille2.cxx:3721 AliITSAlignMille2.cxx:3722 AliITSAlignMille2.cxx:3723 AliITSAlignMille2.cxx:3724 AliITSAlignMille2.cxx:3725 AliITSAlignMille2.cxx:3726 AliITSAlignMille2.cxx:3727 AliITSAlignMille2.cxx:3728 AliITSAlignMille2.cxx:3729 AliITSAlignMille2.cxx:3730 AliITSAlignMille2.cxx:3731 AliITSAlignMille2.cxx:3732 AliITSAlignMille2.cxx:3733 AliITSAlignMille2.cxx:3734 AliITSAlignMille2.cxx:3735 AliITSAlignMille2.cxx:3736 AliITSAlignMille2.cxx:3737 AliITSAlignMille2.cxx:3738 AliITSAlignMille2.cxx:3739 AliITSAlignMille2.cxx:3740 AliITSAlignMille2.cxx:3741 AliITSAlignMille2.cxx:3742 AliITSAlignMille2.cxx:3743 AliITSAlignMille2.cxx:3744 AliITSAlignMille2.cxx:3745 AliITSAlignMille2.cxx:3746 AliITSAlignMille2.cxx:3747 AliITSAlignMille2.cxx:3748 AliITSAlignMille2.cxx:3749 AliITSAlignMille2.cxx:3750 AliITSAlignMille2.cxx:3751 AliITSAlignMille2.cxx:3752 AliITSAlignMille2.cxx:3753 AliITSAlignMille2.cxx:3754 AliITSAlignMille2.cxx:3755 AliITSAlignMille2.cxx:3756 AliITSAlignMille2.cxx:3757 AliITSAlignMille2.cxx:3758 AliITSAlignMille2.cxx:3759 AliITSAlignMille2.cxx:3760 AliITSAlignMille2.cxx:3761 AliITSAlignMille2.cxx:3762 AliITSAlignMille2.cxx:3763 AliITSAlignMille2.cxx:3764 AliITSAlignMille2.cxx:3765 AliITSAlignMille2.cxx:3766 AliITSAlignMille2.cxx:3767 AliITSAlignMille2.cxx:3768 AliITSAlignMille2.cxx:3769 AliITSAlignMille2.cxx:3770 AliITSAlignMille2.cxx:3771 AliITSAlignMille2.cxx:3772 AliITSAlignMille2.cxx:3773 AliITSAlignMille2.cxx:3774 AliITSAlignMille2.cxx:3775 AliITSAlignMille2.cxx:3776 AliITSAlignMille2.cxx:3777 AliITSAlignMille2.cxx:3778 AliITSAlignMille2.cxx:3779 AliITSAlignMille2.cxx:3780 AliITSAlignMille2.cxx:3781 AliITSAlignMille2.cxx:3782 AliITSAlignMille2.cxx:3783 AliITSAlignMille2.cxx:3784 AliITSAlignMille2.cxx:3785 AliITSAlignMille2.cxx:3786 AliITSAlignMille2.cxx:3787 AliITSAlignMille2.cxx:3788 AliITSAlignMille2.cxx:3789 AliITSAlignMille2.cxx:3790 AliITSAlignMille2.cxx:3791 AliITSAlignMille2.cxx:3792 AliITSAlignMille2.cxx:3793 AliITSAlignMille2.cxx:3794 AliITSAlignMille2.cxx:3795 AliITSAlignMille2.cxx:3796 AliITSAlignMille2.cxx:3797 AliITSAlignMille2.cxx:3798 AliITSAlignMille2.cxx:3799 AliITSAlignMille2.cxx:3800 AliITSAlignMille2.cxx:3801 AliITSAlignMille2.cxx:3802 AliITSAlignMille2.cxx:3803 AliITSAlignMille2.cxx:3804 AliITSAlignMille2.cxx:3805 AliITSAlignMille2.cxx:3806 AliITSAlignMille2.cxx:3807 AliITSAlignMille2.cxx:3808 AliITSAlignMille2.cxx:3809 AliITSAlignMille2.cxx:3810 AliITSAlignMille2.cxx:3811 AliITSAlignMille2.cxx:3812 AliITSAlignMille2.cxx:3813 AliITSAlignMille2.cxx:3814 AliITSAlignMille2.cxx:3815 AliITSAlignMille2.cxx:3816 AliITSAlignMille2.cxx:3817 AliITSAlignMille2.cxx:3818 AliITSAlignMille2.cxx:3819 AliITSAlignMille2.cxx:3820 AliITSAlignMille2.cxx:3821 AliITSAlignMille2.cxx:3822 AliITSAlignMille2.cxx:3823 AliITSAlignMille2.cxx:3824 AliITSAlignMille2.cxx:3825 AliITSAlignMille2.cxx:3826 AliITSAlignMille2.cxx:3827 AliITSAlignMille2.cxx:3828 AliITSAlignMille2.cxx:3829 AliITSAlignMille2.cxx:3830 AliITSAlignMille2.cxx:3831 AliITSAlignMille2.cxx:3832 AliITSAlignMille2.cxx:3833 AliITSAlignMille2.cxx:3834 AliITSAlignMille2.cxx:3835 AliITSAlignMille2.cxx:3836 AliITSAlignMille2.cxx:3837 AliITSAlignMille2.cxx:3838 AliITSAlignMille2.cxx:3839 AliITSAlignMille2.cxx:3840 AliITSAlignMille2.cxx:3841 AliITSAlignMille2.cxx:3842 AliITSAlignMille2.cxx:3843 AliITSAlignMille2.cxx:3844 AliITSAlignMille2.cxx:3845 AliITSAlignMille2.cxx:3846 AliITSAlignMille2.cxx:3847 AliITSAlignMille2.cxx:3848 AliITSAlignMille2.cxx:3849 AliITSAlignMille2.cxx:3850 AliITSAlignMille2.cxx:3851 AliITSAlignMille2.cxx:3852 AliITSAlignMille2.cxx:3853 AliITSAlignMille2.cxx:3854 AliITSAlignMille2.cxx:3855 AliITSAlignMille2.cxx:3856 AliITSAlignMille2.cxx:3857 AliITSAlignMille2.cxx:3858 AliITSAlignMille2.cxx:3859 AliITSAlignMille2.cxx:3860 AliITSAlignMille2.cxx:3861 AliITSAlignMille2.cxx:3862 AliITSAlignMille2.cxx:3863 AliITSAlignMille2.cxx:3864 AliITSAlignMille2.cxx:3865 AliITSAlignMille2.cxx:3866 AliITSAlignMille2.cxx:3867 AliITSAlignMille2.cxx:3868 AliITSAlignMille2.cxx:3869 AliITSAlignMille2.cxx:3870 AliITSAlignMille2.cxx:3871 AliITSAlignMille2.cxx:3872 AliITSAlignMille2.cxx:3873 AliITSAlignMille2.cxx:3874 AliITSAlignMille2.cxx:3875 AliITSAlignMille2.cxx:3876 AliITSAlignMille2.cxx:3877 AliITSAlignMille2.cxx:3878 AliITSAlignMille2.cxx:3879 AliITSAlignMille2.cxx:3880 AliITSAlignMille2.cxx:3881 AliITSAlignMille2.cxx:3882 AliITSAlignMille2.cxx:3883 AliITSAlignMille2.cxx:3884 AliITSAlignMille2.cxx:3885 AliITSAlignMille2.cxx:3886 AliITSAlignMille2.cxx:3887 AliITSAlignMille2.cxx:3888 AliITSAlignMille2.cxx:3889 AliITSAlignMille2.cxx:3890 AliITSAlignMille2.cxx:3891 AliITSAlignMille2.cxx:3892 AliITSAlignMille2.cxx:3893 AliITSAlignMille2.cxx:3894 AliITSAlignMille2.cxx:3895 AliITSAlignMille2.cxx:3896 AliITSAlignMille2.cxx:3897 AliITSAlignMille2.cxx:3898 AliITSAlignMille2.cxx:3899 AliITSAlignMille2.cxx:3900 AliITSAlignMille2.cxx:3901 AliITSAlignMille2.cxx:3902 AliITSAlignMille2.cxx:3903 AliITSAlignMille2.cxx:3904 AliITSAlignMille2.cxx:3905 AliITSAlignMille2.cxx:3906 AliITSAlignMille2.cxx:3907 AliITSAlignMille2.cxx:3908 AliITSAlignMille2.cxx:3909 AliITSAlignMille2.cxx:3910 AliITSAlignMille2.cxx:3911 AliITSAlignMille2.cxx:3912 AliITSAlignMille2.cxx:3913 AliITSAlignMille2.cxx:3914 AliITSAlignMille2.cxx:3915 AliITSAlignMille2.cxx:3916 AliITSAlignMille2.cxx:3917 AliITSAlignMille2.cxx:3918 AliITSAlignMille2.cxx:3919 AliITSAlignMille2.cxx:3920 AliITSAlignMille2.cxx:3921 AliITSAlignMille2.cxx:3922 AliITSAlignMille2.cxx:3923 AliITSAlignMille2.cxx:3924 AliITSAlignMille2.cxx:3925 AliITSAlignMille2.cxx:3926 AliITSAlignMille2.cxx:3927 AliITSAlignMille2.cxx:3928 AliITSAlignMille2.cxx:3929 AliITSAlignMille2.cxx:3930 AliITSAlignMille2.cxx:3931 AliITSAlignMille2.cxx:3932 AliITSAlignMille2.cxx:3933 AliITSAlignMille2.cxx:3934 AliITSAlignMille2.cxx:3935 AliITSAlignMille2.cxx:3936 AliITSAlignMille2.cxx:3937 AliITSAlignMille2.cxx:3938 AliITSAlignMille2.cxx:3939 AliITSAlignMille2.cxx:3940 AliITSAlignMille2.cxx:3941 AliITSAlignMille2.cxx:3942 AliITSAlignMille2.cxx:3943 AliITSAlignMille2.cxx:3944 AliITSAlignMille2.cxx:3945 AliITSAlignMille2.cxx:3946 AliITSAlignMille2.cxx:3947 AliITSAlignMille2.cxx:3948 AliITSAlignMille2.cxx:3949 AliITSAlignMille2.cxx:3950 AliITSAlignMille2.cxx:3951 AliITSAlignMille2.cxx:3952 AliITSAlignMille2.cxx:3953 AliITSAlignMille2.cxx:3954 AliITSAlignMille2.cxx:3955 AliITSAlignMille2.cxx:3956 AliITSAlignMille2.cxx:3957 AliITSAlignMille2.cxx:3958 AliITSAlignMille2.cxx:3959 AliITSAlignMille2.cxx:3960 AliITSAlignMille2.cxx:3961 AliITSAlignMille2.cxx:3962 AliITSAlignMille2.cxx:3963 AliITSAlignMille2.cxx:3964 AliITSAlignMille2.cxx:3965 AliITSAlignMille2.cxx:3966 AliITSAlignMille2.cxx:3967 AliITSAlignMille2.cxx:3968 AliITSAlignMille2.cxx:3969 AliITSAlignMille2.cxx:3970 AliITSAlignMille2.cxx:3971 AliITSAlignMille2.cxx:3972 AliITSAlignMille2.cxx:3973 AliITSAlignMille2.cxx:3974 AliITSAlignMille2.cxx:3975 AliITSAlignMille2.cxx:3976 AliITSAlignMille2.cxx:3977 AliITSAlignMille2.cxx:3978 AliITSAlignMille2.cxx:3979 AliITSAlignMille2.cxx:3980 AliITSAlignMille2.cxx:3981 AliITSAlignMille2.cxx:3982 AliITSAlignMille2.cxx:3983 AliITSAlignMille2.cxx:3984 AliITSAlignMille2.cxx:3985 AliITSAlignMille2.cxx:3986 AliITSAlignMille2.cxx:3987 AliITSAlignMille2.cxx:3988 AliITSAlignMille2.cxx:3989 AliITSAlignMille2.cxx:3990 AliITSAlignMille2.cxx:3991 AliITSAlignMille2.cxx:3992 AliITSAlignMille2.cxx:3993 AliITSAlignMille2.cxx:3994 AliITSAlignMille2.cxx:3995 AliITSAlignMille2.cxx:3996 AliITSAlignMille2.cxx:3997 AliITSAlignMille2.cxx:3998 AliITSAlignMille2.cxx:3999 AliITSAlignMille2.cxx:4000 AliITSAlignMille2.cxx:4001 AliITSAlignMille2.cxx:4002 AliITSAlignMille2.cxx:4003 AliITSAlignMille2.cxx:4004 AliITSAlignMille2.cxx:4005 AliITSAlignMille2.cxx:4006 AliITSAlignMille2.cxx:4007 AliITSAlignMille2.cxx:4008 AliITSAlignMille2.cxx:4009 AliITSAlignMille2.cxx:4010 AliITSAlignMille2.cxx:4011 AliITSAlignMille2.cxx:4012 AliITSAlignMille2.cxx:4013 AliITSAlignMille2.cxx:4014 AliITSAlignMille2.cxx:4015 AliITSAlignMille2.cxx:4016 AliITSAlignMille2.cxx:4017 AliITSAlignMille2.cxx:4018 AliITSAlignMille2.cxx:4019 AliITSAlignMille2.cxx:4020 AliITSAlignMille2.cxx:4021 AliITSAlignMille2.cxx:4022 AliITSAlignMille2.cxx:4023 AliITSAlignMille2.cxx:4024 AliITSAlignMille2.cxx:4025 AliITSAlignMille2.cxx:4026 AliITSAlignMille2.cxx:4027 AliITSAlignMille2.cxx:4028 AliITSAlignMille2.cxx:4029 AliITSAlignMille2.cxx:4030 AliITSAlignMille2.cxx:4031 AliITSAlignMille2.cxx:4032 AliITSAlignMille2.cxx:4033 AliITSAlignMille2.cxx:4034 AliITSAlignMille2.cxx:4035 AliITSAlignMille2.cxx:4036 AliITSAlignMille2.cxx:4037 AliITSAlignMille2.cxx:4038 AliITSAlignMille2.cxx:4039 AliITSAlignMille2.cxx:4040 AliITSAlignMille2.cxx:4041 AliITSAlignMille2.cxx:4042 AliITSAlignMille2.cxx:4043 AliITSAlignMille2.cxx:4044 AliITSAlignMille2.cxx:4045 AliITSAlignMille2.cxx:4046 AliITSAlignMille2.cxx:4047 AliITSAlignMille2.cxx:4048 AliITSAlignMille2.cxx:4049 AliITSAlignMille2.cxx:4050 AliITSAlignMille2.cxx:4051 AliITSAlignMille2.cxx:4052 AliITSAlignMille2.cxx:4053 AliITSAlignMille2.cxx:4054 AliITSAlignMille2.cxx:4055 AliITSAlignMille2.cxx:4056 AliITSAlignMille2.cxx:4057 AliITSAlignMille2.cxx:4058 AliITSAlignMille2.cxx:4059 AliITSAlignMille2.cxx:4060 AliITSAlignMille2.cxx:4061 AliITSAlignMille2.cxx:4062 AliITSAlignMille2.cxx:4063 AliITSAlignMille2.cxx:4064 AliITSAlignMille2.cxx:4065 AliITSAlignMille2.cxx:4066 AliITSAlignMille2.cxx:4067 AliITSAlignMille2.cxx:4068 AliITSAlignMille2.cxx:4069 AliITSAlignMille2.cxx:4070 AliITSAlignMille2.cxx:4071 AliITSAlignMille2.cxx:4072 AliITSAlignMille2.cxx:4073 AliITSAlignMille2.cxx:4074 AliITSAlignMille2.cxx:4075 AliITSAlignMille2.cxx:4076 AliITSAlignMille2.cxx:4077 AliITSAlignMille2.cxx:4078 AliITSAlignMille2.cxx:4079 AliITSAlignMille2.cxx:4080 AliITSAlignMille2.cxx:4081 AliITSAlignMille2.cxx:4082 AliITSAlignMille2.cxx:4083 AliITSAlignMille2.cxx:4084 AliITSAlignMille2.cxx:4085 AliITSAlignMille2.cxx:4086 AliITSAlignMille2.cxx:4087 AliITSAlignMille2.cxx:4088 AliITSAlignMille2.cxx:4089 AliITSAlignMille2.cxx:4090 AliITSAlignMille2.cxx:4091 AliITSAlignMille2.cxx:4092 AliITSAlignMille2.cxx:4093 AliITSAlignMille2.cxx:4094 AliITSAlignMille2.cxx:4095 AliITSAlignMille2.cxx:4096 AliITSAlignMille2.cxx:4097 AliITSAlignMille2.cxx:4098 AliITSAlignMille2.cxx:4099 AliITSAlignMille2.cxx:4100 AliITSAlignMille2.cxx:4101 AliITSAlignMille2.cxx:4102 AliITSAlignMille2.cxx:4103 AliITSAlignMille2.cxx:4104 AliITSAlignMille2.cxx:4105 AliITSAlignMille2.cxx:4106 AliITSAlignMille2.cxx:4107 AliITSAlignMille2.cxx:4108 AliITSAlignMille2.cxx:4109 AliITSAlignMille2.cxx:4110 AliITSAlignMille2.cxx:4111 AliITSAlignMille2.cxx:4112 AliITSAlignMille2.cxx:4113 AliITSAlignMille2.cxx:4114 AliITSAlignMille2.cxx:4115 AliITSAlignMille2.cxx:4116 AliITSAlignMille2.cxx:4117 AliITSAlignMille2.cxx:4118 AliITSAlignMille2.cxx:4119 AliITSAlignMille2.cxx:4120 AliITSAlignMille2.cxx:4121 AliITSAlignMille2.cxx:4122 AliITSAlignMille2.cxx:4123 AliITSAlignMille2.cxx:4124 AliITSAlignMille2.cxx:4125 AliITSAlignMille2.cxx:4126 AliITSAlignMille2.cxx:4127 AliITSAlignMille2.cxx:4128 AliITSAlignMille2.cxx:4129 AliITSAlignMille2.cxx:4130 AliITSAlignMille2.cxx:4131 AliITSAlignMille2.cxx:4132 AliITSAlignMille2.cxx:4133 AliITSAlignMille2.cxx:4134 AliITSAlignMille2.cxx:4135 AliITSAlignMille2.cxx:4136 AliITSAlignMille2.cxx:4137 AliITSAlignMille2.cxx:4138 AliITSAlignMille2.cxx:4139 AliITSAlignMille2.cxx:4140 AliITSAlignMille2.cxx:4141 AliITSAlignMille2.cxx:4142 AliITSAlignMille2.cxx:4143 AliITSAlignMille2.cxx:4144 AliITSAlignMille2.cxx:4145 AliITSAlignMille2.cxx:4146 AliITSAlignMille2.cxx:4147 AliITSAlignMille2.cxx:4148 AliITSAlignMille2.cxx:4149 AliITSAlignMille2.cxx:4150 AliITSAlignMille2.cxx:4151 AliITSAlignMille2.cxx:4152 AliITSAlignMille2.cxx:4153 AliITSAlignMille2.cxx:4154 AliITSAlignMille2.cxx:4155 AliITSAlignMille2.cxx:4156 AliITSAlignMille2.cxx:4157 AliITSAlignMille2.cxx:4158 AliITSAlignMille2.cxx:4159 AliITSAlignMille2.cxx:4160 AliITSAlignMille2.cxx:4161 AliITSAlignMille2.cxx:4162 AliITSAlignMille2.cxx:4163 AliITSAlignMille2.cxx:4164 AliITSAlignMille2.cxx:4165 AliITSAlignMille2.cxx:4166 AliITSAlignMille2.cxx:4167 AliITSAlignMille2.cxx:4168 AliITSAlignMille2.cxx:4169 AliITSAlignMille2.cxx:4170 AliITSAlignMille2.cxx:4171 AliITSAlignMille2.cxx:4172 AliITSAlignMille2.cxx:4173 AliITSAlignMille2.cxx:4174 AliITSAlignMille2.cxx:4175 AliITSAlignMille2.cxx:4176 AliITSAlignMille2.cxx:4177 AliITSAlignMille2.cxx:4178 AliITSAlignMille2.cxx:4179 AliITSAlignMille2.cxx:4180 AliITSAlignMille2.cxx:4181 AliITSAlignMille2.cxx:4182 AliITSAlignMille2.cxx:4183 AliITSAlignMille2.cxx:4184 AliITSAlignMille2.cxx:4185 AliITSAlignMille2.cxx:4186 AliITSAlignMille2.cxx:4187 AliITSAlignMille2.cxx:4188 AliITSAlignMille2.cxx:4189 AliITSAlignMille2.cxx:4190 AliITSAlignMille2.cxx:4191 AliITSAlignMille2.cxx:4192 AliITSAlignMille2.cxx:4193 AliITSAlignMille2.cxx:4194 AliITSAlignMille2.cxx:4195 AliITSAlignMille2.cxx:4196 AliITSAlignMille2.cxx:4197 AliITSAlignMille2.cxx:4198 AliITSAlignMille2.cxx:4199 AliITSAlignMille2.cxx:4200 AliITSAlignMille2.cxx:4201 AliITSAlignMille2.cxx:4202 AliITSAlignMille2.cxx:4203 AliITSAlignMille2.cxx:4204 AliITSAlignMille2.cxx:4205 AliITSAlignMille2.cxx:4206 AliITSAlignMille2.cxx:4207 AliITSAlignMille2.cxx:4208 AliITSAlignMille2.cxx:4209 AliITSAlignMille2.cxx:4210 AliITSAlignMille2.cxx:4211 AliITSAlignMille2.cxx:4212 AliITSAlignMille2.cxx:4213 AliITSAlignMille2.cxx:4214 AliITSAlignMille2.cxx:4215 AliITSAlignMille2.cxx:4216 AliITSAlignMille2.cxx:4217 AliITSAlignMille2.cxx:4218 AliITSAlignMille2.cxx:4219 AliITSAlignMille2.cxx:4220 AliITSAlignMille2.cxx:4221 AliITSAlignMille2.cxx:4222 AliITSAlignMille2.cxx:4223 AliITSAlignMille2.cxx:4224 AliITSAlignMille2.cxx:4225 AliITSAlignMille2.cxx:4226 AliITSAlignMille2.cxx:4227 AliITSAlignMille2.cxx:4228 AliITSAlignMille2.cxx:4229 AliITSAlignMille2.cxx:4230 AliITSAlignMille2.cxx:4231 AliITSAlignMille2.cxx:4232 AliITSAlignMille2.cxx:4233 AliITSAlignMille2.cxx:4234 AliITSAlignMille2.cxx:4235 AliITSAlignMille2.cxx:4236 AliITSAlignMille2.cxx:4237 AliITSAlignMille2.cxx:4238 AliITSAlignMille2.cxx:4239 AliITSAlignMille2.cxx:4240 AliITSAlignMille2.cxx:4241 AliITSAlignMille2.cxx:4242 AliITSAlignMille2.cxx:4243 AliITSAlignMille2.cxx:4244 AliITSAlignMille2.cxx:4245 AliITSAlignMille2.cxx:4246 AliITSAlignMille2.cxx:4247 AliITSAlignMille2.cxx:4248 AliITSAlignMille2.cxx:4249 AliITSAlignMille2.cxx:4250 AliITSAlignMille2.cxx:4251 AliITSAlignMille2.cxx:4252 AliITSAlignMille2.cxx:4253 AliITSAlignMille2.cxx:4254 AliITSAlignMille2.cxx:4255 AliITSAlignMille2.cxx:4256 AliITSAlignMille2.cxx:4257 AliITSAlignMille2.cxx:4258 AliITSAlignMille2.cxx:4259 AliITSAlignMille2.cxx:4260 AliITSAlignMille2.cxx:4261 AliITSAlignMille2.cxx:4262 AliITSAlignMille2.cxx:4263 AliITSAlignMille2.cxx:4264 AliITSAlignMille2.cxx:4265 AliITSAlignMille2.cxx:4266 AliITSAlignMille2.cxx:4267 AliITSAlignMille2.cxx:4268 AliITSAlignMille2.cxx:4269 AliITSAlignMille2.cxx:4270 AliITSAlignMille2.cxx:4271 AliITSAlignMille2.cxx:4272 AliITSAlignMille2.cxx:4273 AliITSAlignMille2.cxx:4274 AliITSAlignMille2.cxx:4275 AliITSAlignMille2.cxx:4276 AliITSAlignMille2.cxx:4277 AliITSAlignMille2.cxx:4278 AliITSAlignMille2.cxx:4279 AliITSAlignMille2.cxx:4280 AliITSAlignMille2.cxx:4281 AliITSAlignMille2.cxx:4282 AliITSAlignMille2.cxx:4283 AliITSAlignMille2.cxx:4284 AliITSAlignMille2.cxx:4285 AliITSAlignMille2.cxx:4286 AliITSAlignMille2.cxx:4287 AliITSAlignMille2.cxx:4288 AliITSAlignMille2.cxx:4289 AliITSAlignMille2.cxx:4290 AliITSAlignMille2.cxx:4291 AliITSAlignMille2.cxx:4292 AliITSAlignMille2.cxx:4293 AliITSAlignMille2.cxx:4294 AliITSAlignMille2.cxx:4295 AliITSAlignMille2.cxx:4296 AliITSAlignMille2.cxx:4297 AliITSAlignMille2.cxx:4298 AliITSAlignMille2.cxx:4299 AliITSAlignMille2.cxx:4300 AliITSAlignMille2.cxx:4301 AliITSAlignMille2.cxx:4302 AliITSAlignMille2.cxx:4303 AliITSAlignMille2.cxx:4304 AliITSAlignMille2.cxx:4305 AliITSAlignMille2.cxx:4306 AliITSAlignMille2.cxx:4307 AliITSAlignMille2.cxx:4308 AliITSAlignMille2.cxx:4309 AliITSAlignMille2.cxx:4310 AliITSAlignMille2.cxx:4311 AliITSAlignMille2.cxx:4312 AliITSAlignMille2.cxx:4313 AliITSAlignMille2.cxx:4314 AliITSAlignMille2.cxx:4315 AliITSAlignMille2.cxx:4316 AliITSAlignMille2.cxx:4317 AliITSAlignMille2.cxx:4318 AliITSAlignMille2.cxx:4319 AliITSAlignMille2.cxx:4320 AliITSAlignMille2.cxx:4321 AliITSAlignMille2.cxx:4322 AliITSAlignMille2.cxx:4323 AliITSAlignMille2.cxx:4324 AliITSAlignMille2.cxx:4325 AliITSAlignMille2.cxx:4326 AliITSAlignMille2.cxx:4327 AliITSAlignMille2.cxx:4328 AliITSAlignMille2.cxx:4329 AliITSAlignMille2.cxx:4330 AliITSAlignMille2.cxx:4331 AliITSAlignMille2.cxx:4332 AliITSAlignMille2.cxx:4333 AliITSAlignMille2.cxx:4334 AliITSAlignMille2.cxx:4335 AliITSAlignMille2.cxx:4336 AliITSAlignMille2.cxx:4337 AliITSAlignMille2.cxx:4338 AliITSAlignMille2.cxx:4339 AliITSAlignMille2.cxx:4340 AliITSAlignMille2.cxx:4341 AliITSAlignMille2.cxx:4342 AliITSAlignMille2.cxx:4343 AliITSAlignMille2.cxx:4344 AliITSAlignMille2.cxx:4345 AliITSAlignMille2.cxx:4346 AliITSAlignMille2.cxx:4347 AliITSAlignMille2.cxx:4348 AliITSAlignMille2.cxx:4349 AliITSAlignMille2.cxx:4350 AliITSAlignMille2.cxx:4351 AliITSAlignMille2.cxx:4352 AliITSAlignMille2.cxx:4353 AliITSAlignMille2.cxx:4354 AliITSAlignMille2.cxx:4355 AliITSAlignMille2.cxx:4356 AliITSAlignMille2.cxx:4357 AliITSAlignMille2.cxx:4358 AliITSAlignMille2.cxx:4359 AliITSAlignMille2.cxx:4360 AliITSAlignMille2.cxx:4361 AliITSAlignMille2.cxx:4362 AliITSAlignMille2.cxx:4363 AliITSAlignMille2.cxx:4364 AliITSAlignMille2.cxx:4365 AliITSAlignMille2.cxx:4366 AliITSAlignMille2.cxx:4367 AliITSAlignMille2.cxx:4368 AliITSAlignMille2.cxx:4369 AliITSAlignMille2.cxx:4370 AliITSAlignMille2.cxx:4371 AliITSAlignMille2.cxx:4372 AliITSAlignMille2.cxx:4373 AliITSAlignMille2.cxx:4374 AliITSAlignMille2.cxx:4375 AliITSAlignMille2.cxx:4376 AliITSAlignMille2.cxx:4377 AliITSAlignMille2.cxx:4378 AliITSAlignMille2.cxx:4379 AliITSAlignMille2.cxx:4380 AliITSAlignMille2.cxx:4381 AliITSAlignMille2.cxx:4382 AliITSAlignMille2.cxx:4383 AliITSAlignMille2.cxx:4384 AliITSAlignMille2.cxx:4385 AliITSAlignMille2.cxx:4386 AliITSAlignMille2.cxx:4387 AliITSAlignMille2.cxx:4388 AliITSAlignMille2.cxx:4389 AliITSAlignMille2.cxx:4390 AliITSAlignMille2.cxx:4391 AliITSAlignMille2.cxx:4392 AliITSAlignMille2.cxx:4393 AliITSAlignMille2.cxx:4394 AliITSAlignMille2.cxx:4395 AliITSAlignMille2.cxx:4396 AliITSAlignMille2.cxx:4397 AliITSAlignMille2.cxx:4398 AliITSAlignMille2.cxx:4399 AliITSAlignMille2.cxx:4400 AliITSAlignMille2.cxx:4401 AliITSAlignMille2.cxx:4402 AliITSAlignMille2.cxx:4403 AliITSAlignMille2.cxx:4404 AliITSAlignMille2.cxx:4405 AliITSAlignMille2.cxx:4406 AliITSAlignMille2.cxx:4407 AliITSAlignMille2.cxx:4408 AliITSAlignMille2.cxx:4409 AliITSAlignMille2.cxx:4410 AliITSAlignMille2.cxx:4411 AliITSAlignMille2.cxx:4412 AliITSAlignMille2.cxx:4413 AliITSAlignMille2.cxx:4414 AliITSAlignMille2.cxx:4415 AliITSAlignMille2.cxx:4416 AliITSAlignMille2.cxx:4417 AliITSAlignMille2.cxx:4418 AliITSAlignMille2.cxx:4419 AliITSAlignMille2.cxx:4420 AliITSAlignMille2.cxx:4421 AliITSAlignMille2.cxx:4422 AliITSAlignMille2.cxx:4423 AliITSAlignMille2.cxx:4424 AliITSAlignMille2.cxx:4425 AliITSAlignMille2.cxx:4426 AliITSAlignMille2.cxx:4427 AliITSAlignMille2.cxx:4428 AliITSAlignMille2.cxx:4429 AliITSAlignMille2.cxx:4430 AliITSAlignMille2.cxx:4431 AliITSAlignMille2.cxx:4432 AliITSAlignMille2.cxx:4433 AliITSAlignMille2.cxx:4434 AliITSAlignMille2.cxx:4435 AliITSAlignMille2.cxx:4436 AliITSAlignMille2.cxx:4437 AliITSAlignMille2.cxx:4438 AliITSAlignMille2.cxx:4439 AliITSAlignMille2.cxx:4440 AliITSAlignMille2.cxx:4441 AliITSAlignMille2.cxx:4442 AliITSAlignMille2.cxx:4443 AliITSAlignMille2.cxx:4444 AliITSAlignMille2.cxx:4445 AliITSAlignMille2.cxx:4446 AliITSAlignMille2.cxx:4447 AliITSAlignMille2.cxx:4448 AliITSAlignMille2.cxx:4449 AliITSAlignMille2.cxx:4450 AliITSAlignMille2.cxx:4451 AliITSAlignMille2.cxx:4452 AliITSAlignMille2.cxx:4453 AliITSAlignMille2.cxx:4454 AliITSAlignMille2.cxx:4455 AliITSAlignMille2.cxx:4456 AliITSAlignMille2.cxx:4457 AliITSAlignMille2.cxx:4458 AliITSAlignMille2.cxx:4459 AliITSAlignMille2.cxx:4460 AliITSAlignMille2.cxx:4461 AliITSAlignMille2.cxx:4462 AliITSAlignMille2.cxx:4463 AliITSAlignMille2.cxx:4464 AliITSAlignMille2.cxx:4465 AliITSAlignMille2.cxx:4466 AliITSAlignMille2.cxx:4467 AliITSAlignMille2.cxx:4468 AliITSAlignMille2.cxx:4469 AliITSAlignMille2.cxx:4470 AliITSAlignMille2.cxx:4471 AliITSAlignMille2.cxx:4472 AliITSAlignMille2.cxx:4473 AliITSAlignMille2.cxx:4474 AliITSAlignMille2.cxx:4475 AliITSAlignMille2.cxx:4476 AliITSAlignMille2.cxx:4477 AliITSAlignMille2.cxx:4478 AliITSAlignMille2.cxx:4479 AliITSAlignMille2.cxx:4480 AliITSAlignMille2.cxx:4481 AliITSAlignMille2.cxx:4482 AliITSAlignMille2.cxx:4483 AliITSAlignMille2.cxx:4484 AliITSAlignMille2.cxx:4485 AliITSAlignMille2.cxx:4486 AliITSAlignMille2.cxx:4487 AliITSAlignMille2.cxx:4488 AliITSAlignMille2.cxx:4489 AliITSAlignMille2.cxx:4490 AliITSAlignMille2.cxx:4491 AliITSAlignMille2.cxx:4492 AliITSAlignMille2.cxx:4493 AliITSAlignMille2.cxx:4494 AliITSAlignMille2.cxx:4495 AliITSAlignMille2.cxx:4496 AliITSAlignMille2.cxx:4497 AliITSAlignMille2.cxx:4498 AliITSAlignMille2.cxx:4499 AliITSAlignMille2.cxx:4500 AliITSAlignMille2.cxx:4501 AliITSAlignMille2.cxx:4502 AliITSAlignMille2.cxx:4503 AliITSAlignMille2.cxx:4504 AliITSAlignMille2.cxx:4505 AliITSAlignMille2.cxx:4506 AliITSAlignMille2.cxx:4507 AliITSAlignMille2.cxx:4508 AliITSAlignMille2.cxx:4509 AliITSAlignMille2.cxx:4510 AliITSAlignMille2.cxx:4511 AliITSAlignMille2.cxx:4512 AliITSAlignMille2.cxx:4513 AliITSAlignMille2.cxx:4514 AliITSAlignMille2.cxx:4515 AliITSAlignMille2.cxx:4516 AliITSAlignMille2.cxx:4517 AliITSAlignMille2.cxx:4518 AliITSAlignMille2.cxx:4519 AliITSAlignMille2.cxx:4520 AliITSAlignMille2.cxx:4521 AliITSAlignMille2.cxx:4522 AliITSAlignMille2.cxx:4523 AliITSAlignMille2.cxx:4524 AliITSAlignMille2.cxx:4525 AliITSAlignMille2.cxx:4526 AliITSAlignMille2.cxx:4527 AliITSAlignMille2.cxx:4528 AliITSAlignMille2.cxx:4529 AliITSAlignMille2.cxx:4530 AliITSAlignMille2.cxx:4531 AliITSAlignMille2.cxx:4532 AliITSAlignMille2.cxx:4533 AliITSAlignMille2.cxx:4534 AliITSAlignMille2.cxx:4535 AliITSAlignMille2.cxx:4536 AliITSAlignMille2.cxx:4537 AliITSAlignMille2.cxx:4538 AliITSAlignMille2.cxx:4539 AliITSAlignMille2.cxx:4540 AliITSAlignMille2.cxx:4541 AliITSAlignMille2.cxx:4542 AliITSAlignMille2.cxx:4543 AliITSAlignMille2.cxx:4544 AliITSAlignMille2.cxx:4545 AliITSAlignMille2.cxx:4546 AliITSAlignMille2.cxx:4547 AliITSAlignMille2.cxx:4548 AliITSAlignMille2.cxx:4549 AliITSAlignMille2.cxx:4550 AliITSAlignMille2.cxx:4551 AliITSAlignMille2.cxx:4552 AliITSAlignMille2.cxx:4553 AliITSAlignMille2.cxx:4554 AliITSAlignMille2.cxx:4555 AliITSAlignMille2.cxx:4556 AliITSAlignMille2.cxx:4557 AliITSAlignMille2.cxx:4558 AliITSAlignMille2.cxx:4559 AliITSAlignMille2.cxx:4560 AliITSAlignMille2.cxx:4561 AliITSAlignMille2.cxx:4562 AliITSAlignMille2.cxx:4563 AliITSAlignMille2.cxx:4564 AliITSAlignMille2.cxx:4565 AliITSAlignMille2.cxx:4566 AliITSAlignMille2.cxx:4567 AliITSAlignMille2.cxx:4568 AliITSAlignMille2.cxx:4569 AliITSAlignMille2.cxx:4570 AliITSAlignMille2.cxx:4571 AliITSAlignMille2.cxx:4572 AliITSAlignMille2.cxx:4573 AliITSAlignMille2.cxx:4574 AliITSAlignMille2.cxx:4575 AliITSAlignMille2.cxx:4576 AliITSAlignMille2.cxx:4577 AliITSAlignMille2.cxx:4578 AliITSAlignMille2.cxx:4579 AliITSAlignMille2.cxx:4580 AliITSAlignMille2.cxx:4581 AliITSAlignMille2.cxx:4582 AliITSAlignMille2.cxx:4583 AliITSAlignMille2.cxx:4584 AliITSAlignMille2.cxx:4585 AliITSAlignMille2.cxx:4586 AliITSAlignMille2.cxx:4587 AliITSAlignMille2.cxx:4588 AliITSAlignMille2.cxx:4589 AliITSAlignMille2.cxx:4590 AliITSAlignMille2.cxx:4591 AliITSAlignMille2.cxx:4592 AliITSAlignMille2.cxx:4593 AliITSAlignMille2.cxx:4594 AliITSAlignMille2.cxx:4595 AliITSAlignMille2.cxx:4596 AliITSAlignMille2.cxx:4597 AliITSAlignMille2.cxx:4598 AliITSAlignMille2.cxx:4599 AliITSAlignMille2.cxx:4600 AliITSAlignMille2.cxx:4601 AliITSAlignMille2.cxx:4602 AliITSAlignMille2.cxx:4603 AliITSAlignMille2.cxx:4604 AliITSAlignMille2.cxx:4605 AliITSAlignMille2.cxx:4606 AliITSAlignMille2.cxx:4607 AliITSAlignMille2.cxx:4608 AliITSAlignMille2.cxx:4609 AliITSAlignMille2.cxx:4610 AliITSAlignMille2.cxx:4611 AliITSAlignMille2.cxx:4612 AliITSAlignMille2.cxx:4613 AliITSAlignMille2.cxx:4614 AliITSAlignMille2.cxx:4615 AliITSAlignMille2.cxx:4616 AliITSAlignMille2.cxx:4617 AliITSAlignMille2.cxx:4618 AliITSAlignMille2.cxx:4619 AliITSAlignMille2.cxx:4620 AliITSAlignMille2.cxx:4621 AliITSAlignMille2.cxx:4622 AliITSAlignMille2.cxx:4623 AliITSAlignMille2.cxx:4624 AliITSAlignMille2.cxx:4625 AliITSAlignMille2.cxx:4626 AliITSAlignMille2.cxx:4627 AliITSAlignMille2.cxx:4628 AliITSAlignMille2.cxx:4629 AliITSAlignMille2.cxx:4630 AliITSAlignMille2.cxx:4631 AliITSAlignMille2.cxx:4632 AliITSAlignMille2.cxx:4633 AliITSAlignMille2.cxx:4634 AliITSAlignMille2.cxx:4635 AliITSAlignMille2.cxx:4636 AliITSAlignMille2.cxx:4637 AliITSAlignMille2.cxx:4638 AliITSAlignMille2.cxx:4639 AliITSAlignMille2.cxx:4640 AliITSAlignMille2.cxx:4641 AliITSAlignMille2.cxx:4642 AliITSAlignMille2.cxx:4643 AliITSAlignMille2.cxx:4644 AliITSAlignMille2.cxx:4645 AliITSAlignMille2.cxx:4646 AliITSAlignMille2.cxx:4647 AliITSAlignMille2.cxx:4648 AliITSAlignMille2.cxx:4649 AliITSAlignMille2.cxx:4650 AliITSAlignMille2.cxx:4651 AliITSAlignMille2.cxx:4652 AliITSAlignMille2.cxx:4653 AliITSAlignMille2.cxx:4654 AliITSAlignMille2.cxx:4655 AliITSAlignMille2.cxx:4656 AliITSAlignMille2.cxx:4657 AliITSAlignMille2.cxx:4658 AliITSAlignMille2.cxx:4659 AliITSAlignMille2.cxx:4660 AliITSAlignMille2.cxx:4661 AliITSAlignMille2.cxx:4662 AliITSAlignMille2.cxx:4663 AliITSAlignMille2.cxx:4664 AliITSAlignMille2.cxx:4665 AliITSAlignMille2.cxx:4666 AliITSAlignMille2.cxx:4667 AliITSAlignMille2.cxx:4668 AliITSAlignMille2.cxx:4669 AliITSAlignMille2.cxx:4670 AliITSAlignMille2.cxx:4671 AliITSAlignMille2.cxx:4672 AliITSAlignMille2.cxx:4673 AliITSAlignMille2.cxx:4674 AliITSAlignMille2.cxx:4675 AliITSAlignMille2.cxx:4676 AliITSAlignMille2.cxx:4677 AliITSAlignMille2.cxx:4678 AliITSAlignMille2.cxx:4679 AliITSAlignMille2.cxx:4680 AliITSAlignMille2.cxx:4681 AliITSAlignMille2.cxx:4682 AliITSAlignMille2.cxx:4683 AliITSAlignMille2.cxx:4684 AliITSAlignMille2.cxx:4685 AliITSAlignMille2.cxx:4686 AliITSAlignMille2.cxx:4687 AliITSAlignMille2.cxx:4688 AliITSAlignMille2.cxx:4689 AliITSAlignMille2.cxx:4690 AliITSAlignMille2.cxx:4691 AliITSAlignMille2.cxx:4692 AliITSAlignMille2.cxx:4693 AliITSAlignMille2.cxx:4694 AliITSAlignMille2.cxx:4695 AliITSAlignMille2.cxx:4696 AliITSAlignMille2.cxx:4697 AliITSAlignMille2.cxx:4698 AliITSAlignMille2.cxx:4699 AliITSAlignMille2.cxx:4700 AliITSAlignMille2.cxx:4701 AliITSAlignMille2.cxx:4702 AliITSAlignMille2.cxx:4703 AliITSAlignMille2.cxx:4704 AliITSAlignMille2.cxx:4705 AliITSAlignMille2.cxx:4706 AliITSAlignMille2.cxx:4707 AliITSAlignMille2.cxx:4708 AliITSAlignMille2.cxx:4709 AliITSAlignMille2.cxx:4710 AliITSAlignMille2.cxx:4711 AliITSAlignMille2.cxx:4712 AliITSAlignMille2.cxx:4713 AliITSAlignMille2.cxx:4714 AliITSAlignMille2.cxx:4715 AliITSAlignMille2.cxx:4716 AliITSAlignMille2.cxx:4717 AliITSAlignMille2.cxx:4718 AliITSAlignMille2.cxx:4719 AliITSAlignMille2.cxx:4720 AliITSAlignMille2.cxx:4721 AliITSAlignMille2.cxx:4722 AliITSAlignMille2.cxx:4723 AliITSAlignMille2.cxx:4724 AliITSAlignMille2.cxx:4725 AliITSAlignMille2.cxx:4726 AliITSAlignMille2.cxx:4727 AliITSAlignMille2.cxx:4728 AliITSAlignMille2.cxx:4729 AliITSAlignMille2.cxx:4730 AliITSAlignMille2.cxx:4731 AliITSAlignMille2.cxx:4732 AliITSAlignMille2.cxx:4733 AliITSAlignMille2.cxx:4734 AliITSAlignMille2.cxx:4735 AliITSAlignMille2.cxx:4736 AliITSAlignMille2.cxx:4737 AliITSAlignMille2.cxx:4738 AliITSAlignMille2.cxx:4739 AliITSAlignMille2.cxx:4740 AliITSAlignMille2.cxx:4741 AliITSAlignMille2.cxx:4742 AliITSAlignMille2.cxx:4743 AliITSAlignMille2.cxx:4744 AliITSAlignMille2.cxx:4745 AliITSAlignMille2.cxx:4746 AliITSAlignMille2.cxx:4747 AliITSAlignMille2.cxx:4748 AliITSAlignMille2.cxx:4749 AliITSAlignMille2.cxx:4750 AliITSAlignMille2.cxx:4751 AliITSAlignMille2.cxx:4752 AliITSAlignMille2.cxx:4753 AliITSAlignMille2.cxx:4754 AliITSAlignMille2.cxx:4755 AliITSAlignMille2.cxx:4756 AliITSAlignMille2.cxx:4757 AliITSAlignMille2.cxx:4758 AliITSAlignMille2.cxx:4759 AliITSAlignMille2.cxx:4760 AliITSAlignMille2.cxx:4761 AliITSAlignMille2.cxx:4762 AliITSAlignMille2.cxx:4763 AliITSAlignMille2.cxx:4764 AliITSAlignMille2.cxx:4765 AliITSAlignMille2.cxx:4766 AliITSAlignMille2.cxx:4767 AliITSAlignMille2.cxx:4768 AliITSAlignMille2.cxx:4769 AliITSAlignMille2.cxx:4770 AliITSAlignMille2.cxx:4771 AliITSAlignMille2.cxx:4772 AliITSAlignMille2.cxx:4773 AliITSAlignMille2.cxx:4774 AliITSAlignMille2.cxx:4775 AliITSAlignMille2.cxx:4776 AliITSAlignMille2.cxx:4777 AliITSAlignMille2.cxx:4778 AliITSAlignMille2.cxx:4779 AliITSAlignMille2.cxx:4780 AliITSAlignMille2.cxx:4781 AliITSAlignMille2.cxx:4782 AliITSAlignMille2.cxx:4783 AliITSAlignMille2.cxx:4784 AliITSAlignMille2.cxx:4785 AliITSAlignMille2.cxx:4786 AliITSAlignMille2.cxx:4787 AliITSAlignMille2.cxx:4788 AliITSAlignMille2.cxx:4789 AliITSAlignMille2.cxx:4790 AliITSAlignMille2.cxx:4791 AliITSAlignMille2.cxx:4792 AliITSAlignMille2.cxx:4793 AliITSAlignMille2.cxx:4794 AliITSAlignMille2.cxx:4795 AliITSAlignMille2.cxx:4796 AliITSAlignMille2.cxx:4797 AliITSAlignMille2.cxx:4798 AliITSAlignMille2.cxx:4799 AliITSAlignMille2.cxx:4800 AliITSAlignMille2.cxx:4801 AliITSAlignMille2.cxx:4802 AliITSAlignMille2.cxx:4803 AliITSAlignMille2.cxx:4804 AliITSAlignMille2.cxx:4805 AliITSAlignMille2.cxx:4806 AliITSAlignMille2.cxx:4807 AliITSAlignMille2.cxx:4808 AliITSAlignMille2.cxx:4809 AliITSAlignMille2.cxx:4810 AliITSAlignMille2.cxx:4811 AliITSAlignMille2.cxx:4812 AliITSAlignMille2.cxx:4813 AliITSAlignMille2.cxx:4814 AliITSAlignMille2.cxx:4815 AliITSAlignMille2.cxx:4816 AliITSAlignMille2.cxx:4817 AliITSAlignMille2.cxx:4818 AliITSAlignMille2.cxx:4819 AliITSAlignMille2.cxx:4820 AliITSAlignMille2.cxx:4821 AliITSAlignMille2.cxx:4822 AliITSAlignMille2.cxx:4823 AliITSAlignMille2.cxx:4824 AliITSAlignMille2.cxx:4825 AliITSAlignMille2.cxx:4826 AliITSAlignMille2.cxx:4827 AliITSAlignMille2.cxx:4828 AliITSAlignMille2.cxx:4829 AliITSAlignMille2.cxx:4830 AliITSAlignMille2.cxx:4831 AliITSAlignMille2.cxx:4832 AliITSAlignMille2.cxx:4833 AliITSAlignMille2.cxx:4834 AliITSAlignMille2.cxx:4835 AliITSAlignMille2.cxx:4836 AliITSAlignMille2.cxx:4837 AliITSAlignMille2.cxx:4838 AliITSAlignMille2.cxx:4839 AliITSAlignMille2.cxx:4840 AliITSAlignMille2.cxx:4841 AliITSAlignMille2.cxx:4842 AliITSAlignMille2.cxx:4843 AliITSAlignMille2.cxx:4844 AliITSAlignMille2.cxx:4845 AliITSAlignMille2.cxx:4846 AliITSAlignMille2.cxx:4847 AliITSAlignMille2.cxx:4848 AliITSAlignMille2.cxx:4849 AliITSAlignMille2.cxx:4850 AliITSAlignMille2.cxx:4851 AliITSAlignMille2.cxx:4852 AliITSAlignMille2.cxx:4853 AliITSAlignMille2.cxx:4854 AliITSAlignMille2.cxx:4855 AliITSAlignMille2.cxx:4856 AliITSAlignMille2.cxx:4857 AliITSAlignMille2.cxx:4858 AliITSAlignMille2.cxx:4859 AliITSAlignMille2.cxx:4860 AliITSAlignMille2.cxx:4861 AliITSAlignMille2.cxx:4862 AliITSAlignMille2.cxx:4863 AliITSAlignMille2.cxx:4864 AliITSAlignMille2.cxx:4865 AliITSAlignMille2.cxx:4866 AliITSAlignMille2.cxx:4867 AliITSAlignMille2.cxx:4868 AliITSAlignMille2.cxx:4869 AliITSAlignMille2.cxx:4870 AliITSAlignMille2.cxx:4871 AliITSAlignMille2.cxx:4872 AliITSAlignMille2.cxx:4873 AliITSAlignMille2.cxx:4874 AliITSAlignMille2.cxx:4875 AliITSAlignMille2.cxx:4876 AliITSAlignMille2.cxx:4877 AliITSAlignMille2.cxx:4878 AliITSAlignMille2.cxx:4879 AliITSAlignMille2.cxx:4880 AliITSAlignMille2.cxx:4881 AliITSAlignMille2.cxx:4882 AliITSAlignMille2.cxx:4883 AliITSAlignMille2.cxx:4884 AliITSAlignMille2.cxx:4885 AliITSAlignMille2.cxx:4886 AliITSAlignMille2.cxx:4887 AliITSAlignMille2.cxx:4888 AliITSAlignMille2.cxx:4889 AliITSAlignMille2.cxx:4890 AliITSAlignMille2.cxx:4891 AliITSAlignMille2.cxx:4892 AliITSAlignMille2.cxx:4893 AliITSAlignMille2.cxx:4894 AliITSAlignMille2.cxx:4895 AliITSAlignMille2.cxx:4896 AliITSAlignMille2.cxx:4897 AliITSAlignMille2.cxx:4898 AliITSAlignMille2.cxx:4899 AliITSAlignMille2.cxx:4900 AliITSAlignMille2.cxx:4901 AliITSAlignMille2.cxx:4902 AliITSAlignMille2.cxx:4903 AliITSAlignMille2.cxx:4904 AliITSAlignMille2.cxx:4905 AliITSAlignMille2.cxx:4906 AliITSAlignMille2.cxx:4907 AliITSAlignMille2.cxx:4908 AliITSAlignMille2.cxx:4909 AliITSAlignMille2.cxx:4910 AliITSAlignMille2.cxx:4911 AliITSAlignMille2.cxx:4912 AliITSAlignMille2.cxx:4913 AliITSAlignMille2.cxx:4914 AliITSAlignMille2.cxx:4915 AliITSAlignMille2.cxx:4916 AliITSAlignMille2.cxx:4917 AliITSAlignMille2.cxx:4918 AliITSAlignMille2.cxx:4919 AliITSAlignMille2.cxx:4920 AliITSAlignMille2.cxx:4921 AliITSAlignMille2.cxx:4922 AliITSAlignMille2.cxx:4923 AliITSAlignMille2.cxx:4924 AliITSAlignMille2.cxx:4925 AliITSAlignMille2.cxx:4926 AliITSAlignMille2.cxx:4927 AliITSAlignMille2.cxx:4928 AliITSAlignMille2.cxx:4929 AliITSAlignMille2.cxx:4930 AliITSAlignMille2.cxx:4931 AliITSAlignMille2.cxx:4932 AliITSAlignMille2.cxx:4933 AliITSAlignMille2.cxx:4934 AliITSAlignMille2.cxx:4935 AliITSAlignMille2.cxx:4936 AliITSAlignMille2.cxx:4937 AliITSAlignMille2.cxx:4938 AliITSAlignMille2.cxx:4939 AliITSAlignMille2.cxx:4940 AliITSAlignMille2.cxx:4941 AliITSAlignMille2.cxx:4942 AliITSAlignMille2.cxx:4943 AliITSAlignMille2.cxx:4944 AliITSAlignMille2.cxx:4945 AliITSAlignMille2.cxx:4946 AliITSAlignMille2.cxx:4947 AliITSAlignMille2.cxx:4948 AliITSAlignMille2.cxx:4949 AliITSAlignMille2.cxx:4950 AliITSAlignMille2.cxx:4951 AliITSAlignMille2.cxx:4952 AliITSAlignMille2.cxx:4953 AliITSAlignMille2.cxx:4954 AliITSAlignMille2.cxx:4955 AliITSAlignMille2.cxx:4956 AliITSAlignMille2.cxx:4957 AliITSAlignMille2.cxx:4958 AliITSAlignMille2.cxx:4959 AliITSAlignMille2.cxx:4960 AliITSAlignMille2.cxx:4961 AliITSAlignMille2.cxx:4962 AliITSAlignMille2.cxx:4963 AliITSAlignMille2.cxx:4964 AliITSAlignMille2.cxx:4965 AliITSAlignMille2.cxx:4966 AliITSAlignMille2.cxx:4967 AliITSAlignMille2.cxx:4968 AliITSAlignMille2.cxx:4969 AliITSAlignMille2.cxx:4970 AliITSAlignMille2.cxx:4971 AliITSAlignMille2.cxx:4972 AliITSAlignMille2.cxx:4973 AliITSAlignMille2.cxx:4974 AliITSAlignMille2.cxx:4975 AliITSAlignMille2.cxx:4976 AliITSAlignMille2.cxx:4977 AliITSAlignMille2.cxx:4978 AliITSAlignMille2.cxx:4979 AliITSAlignMille2.cxx:4980 AliITSAlignMille2.cxx:4981 AliITSAlignMille2.cxx:4982 AliITSAlignMille2.cxx:4983 AliITSAlignMille2.cxx:4984 AliITSAlignMille2.cxx:4985 AliITSAlignMille2.cxx:4986 AliITSAlignMille2.cxx:4987 AliITSAlignMille2.cxx:4988 AliITSAlignMille2.cxx:4989 AliITSAlignMille2.cxx:4990 AliITSAlignMille2.cxx:4991 AliITSAlignMille2.cxx:4992 AliITSAlignMille2.cxx:4993 AliITSAlignMille2.cxx:4994 AliITSAlignMille2.cxx:4995 AliITSAlignMille2.cxx:4996 AliITSAlignMille2.cxx:4997 AliITSAlignMille2.cxx:4998 AliITSAlignMille2.cxx:4999 AliITSAlignMille2.cxx:5000 AliITSAlignMille2.cxx:5001 AliITSAlignMille2.cxx:5002 AliITSAlignMille2.cxx:5003 AliITSAlignMille2.cxx:5004 AliITSAlignMille2.cxx:5005 AliITSAlignMille2.cxx:5006 AliITSAlignMille2.cxx:5007 AliITSAlignMille2.cxx:5008 AliITSAlignMille2.cxx:5009 AliITSAlignMille2.cxx:5010 AliITSAlignMille2.cxx:5011