#include <fstream>
#include <Riostream.h>
#include "TH2.h"
#include "AliMultiDimVector.h"
#include "AliLog.h"
#include "TString.h"
using std::cout;
using std::endl;
ClassImp(AliMultiDimVector)
AliMultiDimVector::AliMultiDimVector():TNamed("AliMultiDimVector","default"),
fNVariables(0),
fNPtBins(0),
fVett(0),
fNTotCells(0),
fIsIntegrated(0)
{
for(Int_t i=0; i<fgkMaxNVariables; i++) {
fNCutSteps[i]=0;
fMinLimits[i]=0;
fMaxLimits[i]=0;
fGreaterThan[i]=kTRUE;
fAxisTitles[i]="";
}
for(Int_t i=0; i<fgkMaxNPtBins+1; i++) {
fPtLimits[i]=0;
}
}
AliMultiDimVector::AliMultiDimVector(const char *name,const char *title, const Int_t nptbins, const Float_t* ptlimits, const Int_t npars, const Int_t *nofcells,const Float_t *loosecuts, const Float_t *tightcuts, const TString *axisTitles):TNamed(name,title),
fNVariables(npars),
fNPtBins(nptbins),
fVett(0),
fNTotCells(0),
fIsIntegrated(0){
for(Int_t i=0; i<fgkMaxNVariables; i++) {
fNCutSteps[i]=0;
fMinLimits[i]=0;
fMaxLimits[i]=0;
fGreaterThan[i]=kTRUE;
fAxisTitles[i]="";
}
for(Int_t i=0; i<fgkMaxNPtBins+1; i++) {
fPtLimits[i]=0;
}
ULong64_t ntot=1;
for(Int_t i=0;i<fNVariables;i++){
ntot*=nofcells[i];
fNCutSteps[i]=nofcells[i];
if(loosecuts[i] == tightcuts[i]){
if(loosecuts[i]!=0){
printf("AliMultiDimVector::AliMultiDimVector: WARNING! same tight/loose variable for variable number %d. AliMultiDimVector with run with the following values: loose: %f; tight: %f\n",i,tightcuts[i]-0.1*tightcuts[i],tightcuts[i]);
fMinLimits[i]=tightcuts[i]-0.1*tightcuts[i];
fMaxLimits[i]=tightcuts[i];
}else{
fMinLimits[i]=0;
fMaxLimits[i]=0.0001;
}
fGreaterThan[i]=kTRUE;
}
if(loosecuts[i] < tightcuts[i]){
fMinLimits[i]=loosecuts[i];
fMaxLimits[i]=tightcuts[i];
fGreaterThan[i]=kTRUE;
}else{
fMinLimits[i]=tightcuts[i];
fMaxLimits[i]=loosecuts[i];
fGreaterThan[i]=kFALSE;
}
fAxisTitles[i]=axisTitles[i].Data();
}
fNTotCells=ntot*fNPtBins;
fVett.Set(fNTotCells);
for(Int_t ipt=0;ipt<fNPtBins+1;ipt++) fPtLimits[ipt]=ptlimits[ipt];
for(Int_t ipt=fNPtBins+1;ipt<fgkMaxNPtBins+1;ipt++) fPtLimits[ipt]=999.;
for (ULong64_t j=0;j<fNTotCells;j++) fVett.AddAt(0,j);
}
AliMultiDimVector::AliMultiDimVector(const AliMultiDimVector &mv):TNamed(mv.GetName(),mv.GetTitle()),
fNVariables(mv.fNVariables),
fNPtBins(mv.fNPtBins),
fVett(0),
fNTotCells(mv.fNTotCells),
fIsIntegrated(mv.fIsIntegrated)
{
for(Int_t i=0; i<fgkMaxNVariables; i++) {
fNCutSteps[i]=0;
fMinLimits[i]=0;
fMaxLimits[i]=0;
fGreaterThan[i]=kTRUE;
fAxisTitles[i]="";
}
for(Int_t i=0; i<fgkMaxNPtBins+1; i++) {
fPtLimits[i]=0;
}
for(Int_t i=0;i<fNVariables;i++){
fNCutSteps[i]=mv.GetNCutSteps(i);
fMinLimits[i]=mv.GetMinLimit(i);
fMaxLimits[i]=mv.GetMaxLimit(i);
fGreaterThan[i]=mv.GetGreaterThan(i);
fAxisTitles[i]=mv.GetAxisTitle(i);
}
fVett.Set(fNTotCells);
for(Int_t ipt=0;ipt<fNPtBins+1;ipt++) fPtLimits[ipt]=mv.GetPtLimit(ipt);
for(ULong64_t i=0;i<fNTotCells;i++) fVett[i]=mv.GetElement(i);
}
AliMultiDimVector &AliMultiDimVector::operator=(const AliMultiDimVector &mv)
{
if(&mv == this) return *this;
TNamed::operator=(mv);
fNVariables=mv.fNVariables;
fNPtBins=mv.fNPtBins;
fNTotCells=mv.fNTotCells;
fIsIntegrated=mv.fIsIntegrated;
for(Int_t i=0; i<fgkMaxNVariables; i++) {
fNCutSteps[i]=0;
fMinLimits[i]=0;
fMaxLimits[i]=0;
fGreaterThan[i]=kTRUE;
fAxisTitles[i]="";
}
for(Int_t i=0; i<fgkMaxNPtBins+1; i++) {
fPtLimits[i]=0;
}
for(Int_t i=0;i<fNVariables;i++){
fNCutSteps[i]=mv.GetNCutSteps(i);
fMinLimits[i]=mv.GetMinLimit(i);
fMaxLimits[i]=mv.GetMaxLimit(i);
fGreaterThan[i]=mv.GetGreaterThan(i);
fAxisTitles[i]=mv.GetAxisTitle(i);
}
fVett.Set(fNTotCells);
for(Int_t ipt=0;ipt<fNPtBins+1;ipt++) fPtLimits[ipt]=mv.GetPtLimit(ipt);
for(ULong64_t i=0;i<fNTotCells;i++) fVett[i]=mv.GetElement(i);
return *this;
}
void AliMultiDimVector::CopyStructure(const AliMultiDimVector* mv){
fNVariables=mv->GetNVariables();
fNPtBins=mv->GetNPtBins();
fNTotCells=mv->GetNTotCells();
fIsIntegrated=mv->IsIntegrated();
for(Int_t i=0;i<fNVariables;i++){
fNCutSteps[i]=mv->GetNCutSteps(i);
fMinLimits[i]=mv->GetMinLimit(i);
fMaxLimits[i]=mv->GetMaxLimit(i);
fGreaterThan[i]=mv->GetGreaterThan(i);
fAxisTitles[i]=mv->GetAxisTitle(i);
}
for(Int_t ipt=0;ipt<fNPtBins+1;ipt++) fPtLimits[ipt]=mv->GetPtLimit(ipt);
fVett.Set(fNTotCells);
}
Bool_t AliMultiDimVector::GetIndicesFromGlobalAddress(ULong64_t globadd, Int_t *ind, Int_t &ptbin) const {
if(globadd>=fNTotCells) return kFALSE;
ULong64_t r=globadd;
Int_t prod=1;
Int_t nOfCellsPlusLevel[fgkMaxNVariables+1];
for(Int_t k=0;k<fNVariables;k++) nOfCellsPlusLevel[k]=fNCutSteps[k];
nOfCellsPlusLevel[fNVariables]=fNPtBins;
for(Int_t i=0;i<fNVariables+1;i++) prod*=nOfCellsPlusLevel[i];
for(Int_t i=0;i<fNVariables+1;i++){
prod/=nOfCellsPlusLevel[i];
if(i<fNVariables) ind[i]=r/prod;
else ptbin=r/prod;
r=globadd%prod;
}
return kTRUE;
}
Bool_t AliMultiDimVector::GetCutValuesFromGlobalAddress(ULong64_t globadd, Float_t *cuts, Int_t &ptbin) const {
Int_t ind[fgkMaxNVariables];
Bool_t retcode=GetIndicesFromGlobalAddress(globadd,ind,ptbin);
if(!retcode) return kFALSE;
for(Int_t i=0;i<fNVariables;i++) cuts[i]=GetCutValue(i,ind[i]);
return kTRUE;
}
ULong64_t AliMultiDimVector::GetGlobalAddressFromIndices(const Int_t *ind, Int_t ptbin) const {
Int_t prod=1;
ULong64_t elem=0;
Int_t indexPlusLevel[fgkMaxNVariables+1];
Int_t nOfCellsPlusLevel[fgkMaxNVariables+1];
for(Int_t i=0;i<fNVariables;i++){
indexPlusLevel[i]=ind[i];
nOfCellsPlusLevel[i]=fNCutSteps[i];
}
indexPlusLevel[fNVariables]=ptbin;
nOfCellsPlusLevel[fNVariables]=fNPtBins;
for(Int_t i=0;i<fNVariables+1;i++){
prod=indexPlusLevel[i];
if(i<fNVariables){
for(Int_t j=i+1;j<fNVariables+1;j++){
prod*=nOfCellsPlusLevel[j];
}
}
elem+=prod;
}
return elem;
}
Bool_t AliMultiDimVector::GetIndicesFromValues(const Float_t *values, Int_t *ind) const {
for(Int_t i=0;i<fNVariables;i++){
if(fGreaterThan[i]){
if(values[i]<GetMinLimit(i)) return kFALSE;
ind[i]=(Int_t)((values[i]-fMinLimits[i])/GetCutStep(i));
if(ind[i]>=GetNCutSteps(i)) ind[i]=GetNCutSteps(i)-1;
}else{
if(values[i]>GetMaxLimit(i)) return kFALSE;
ind[i]=(Int_t)((fMaxLimits[i]-values[i])/GetCutStep(i));
if(ind[i]>=GetNCutSteps(i)) ind[i]=GetNCutSteps(i)-1;
}
}
return kTRUE;
}
ULong64_t AliMultiDimVector::GetGlobalAddressFromValues(const Float_t *values, Int_t ptbin) const {
Int_t ind[fgkMaxNVariables];
Bool_t retcode=GetIndicesFromValues(values,ind);
if(retcode) return GetGlobalAddressFromIndices(ind,ptbin);
else{
AliError("Values out of range");
return fNTotCells+999;
}
}
void AliMultiDimVector::MultiplyBy(Float_t factor){
for(ULong64_t i=0;i<fNTotCells;i++){
if(fVett.At(i)>0.)
fVett.AddAt(fVett.At(i)*factor,i);
else fVett.AddAt(-1,i);
}
}
void AliMultiDimVector::Multiply(const AliMultiDimVector* mv,Float_t factor){
for(ULong64_t i=0;i<fNTotCells;i++){
if(mv->GetElement(i)>0.)
fVett.AddAt(mv->GetElement(i)*factor,i);
else fVett.AddAt(-1,i);
}
}
void AliMultiDimVector::Multiply(const AliMultiDimVector* mv1, const AliMultiDimVector* mv2){
for(ULong64_t i=0;i<fNTotCells;i++){
if(mv1->GetElement(i)>0. && mv2->GetElement(i)>0.)
fVett.AddAt(mv1->GetElement(i)*mv2->GetElement(i),i);
else fVett.AddAt(-1,i);
}
}
void AliMultiDimVector::Add(const AliMultiDimVector* mv){
if (mv->GetNTotCells()!=fNTotCells){
AliError("Different dimension of the vectors!!");
}else{
for(ULong64_t i=0;i<fNTotCells;i++)
if(mv->GetElement(i)>0. && fVett.At(i)>0.)
fVett.AddAt(fVett.At(i)+mv->GetElement(i),i);
else fVett.AddAt(-1,i);
}
}
void AliMultiDimVector::Sum(const AliMultiDimVector* mv1, const AliMultiDimVector* mv2){
if (fNTotCells!=mv1->GetNTotCells()&&mv1->GetNTotCells()!=mv2->GetNTotCells()) {
AliError("Different dimension of the vectors!!");
}
else{
for(ULong64_t i=0;i<mv1->GetNTotCells();i++) {
if(mv1->GetElement(i)>0. && mv2->GetElement(i)>0.)
fVett.AddAt(mv1->GetElement(i)+mv2->GetElement(i),i);
else fVett.AddAt(-1,i);
}
}
}
void AliMultiDimVector::LinearComb(const AliMultiDimVector* mv1, Float_t norm1, const AliMultiDimVector* mv2, Float_t norm2){
if (fNTotCells!=mv1->GetNTotCells()&&mv1->GetNTotCells()!=mv2->GetNTotCells()) {
AliError("Different dimension of the vectors!!");
}
else{
for(ULong64_t i=0;i<mv1->GetNTotCells();i++) {
if(mv1->GetElement(i)>0. && mv2->GetElement(i)>0.)
fVett.AddAt(norm1*mv1->GetElement(i)+norm2*mv2->GetElement(i),i);
else fVett.AddAt(-1,i);
}
}
}
void AliMultiDimVector::DivideBy(const AliMultiDimVector* mv){
if (mv->GetNTotCells()!=fNTotCells) {
AliError("Different dimension of the vectors!!");
}
else{
for(ULong64_t i=0;i<fNTotCells;i++)
if(mv->GetElement(i)!=0 &&mv->GetElement(i)>0. && fVett.At(i)>0.)
fVett.AddAt(fVett.At(i)/mv->GetElement(i),i);
else fVett.AddAt(-1,i);
}
}
void AliMultiDimVector::Divide(const AliMultiDimVector* mv1, const AliMultiDimVector* mv2){
if (fNTotCells!=mv1->GetNTotCells()&&mv1->GetNTotCells()!=mv2->GetNTotCells()) {
AliError("Different dimension of the vectors!!");
}
else{
for(ULong64_t i=0;i<mv1->GetNTotCells();i++)
if(mv2->GetElement(i)!=0&& mv2->GetElement(i)>0.&& mv1->GetElement(i)>0.)
{
fVett.AddAt(mv1->GetElement(i)/mv2->GetElement(i),i);
}
else fVett.AddAt(-1,i);
}
}
void AliMultiDimVector::Sqrt(){
for(ULong64_t i=0;i<fNTotCells;i++) {
if(fVett.At(i)>=0) fVett.AddAt(TMath::Sqrt(fVett.At(i)),i);
else {
fVett.AddAt(-1,i);
}
}
}
void AliMultiDimVector::Sqrt(const AliMultiDimVector* mv){
for(ULong64_t i=0;i<fNTotCells;i++)
if(mv->GetElement(i)>=0) fVett.AddAt(TMath::Sqrt(mv->GetElement(i)),i);
else fVett.AddAt(-1,i);
}
void AliMultiDimVector::FindMaximum(Float_t& maxValue, Int_t *ind , Int_t ptbin){
const ULong64_t nelem=fNTotCells/fNPtBins;
TArrayF vett;
vett.Set(nelem);
ULong64_t runningAddress;
for(ULong64_t i=0;i<nelem;i++){
runningAddress=ptbin+i*fNPtBins;
vett.AddAt(fVett[runningAddress],i);
}
maxValue=TMath::MaxElement(nelem,vett.GetArray());
ULong64_t maxAddress=TMath::LocMax(nelem,vett.GetArray());
ULong64_t maxGlobalAddress=ptbin+maxAddress*fNPtBins;
Int_t checkedptbin;
GetIndicesFromGlobalAddress(maxGlobalAddress,ind,checkedptbin);
}
Int_t* AliMultiDimVector::FindLocalMaximum(Float_t& maxValue, Int_t *numFixed,Int_t* indFixed, Int_t nfixed,Int_t ptbin){
if(nfixed>fNVariables)cout<<"AliMultiDimVector::FindLocalMaximum:ERROR! too many variables"<<endl;
ULong64_t nelem=1;
Int_t* indMax=new Int_t[fNVariables];
for (Int_t iv=0;iv<fNVariables;iv++)indMax[iv]=0;
for(Int_t i=0;i<nfixed;i++){
indMax[numFixed[i]]=indFixed[i];
}
TArrayF vett;
vett.Set(nelem);
ULong64_t first=fNTotCells/fNPtBins*ptbin;
ULong64_t last=first+fNTotCells/fNPtBins;
Int_t dummyptbin;
maxValue=fVett[GetGlobalAddressFromIndices(indMax,ptbin)];
Int_t tmpInd[fNVariables];
for(ULong64_t iga=first;iga<last;iga++){
GetIndicesFromGlobalAddress(iga,tmpInd,dummyptbin);
Bool_t goodCell=kTRUE;
for(Int_t ifix=0;ifix<nfixed&&goodCell;ifix++){
if(indFixed[ifix]!=tmpInd[numFixed[ifix]])goodCell=kFALSE;
}
if(goodCell){
if(fVett[iga]>maxValue){
maxValue=fVett[iga];
for(Int_t inv=0;inv<fNVariables;inv++)indMax[inv]=tmpInd[inv];
}
}
}
return indMax;
}
TH2F* AliMultiDimVector::Project(Int_t firstVar, Int_t secondVar, const Int_t* fixedVars, Int_t ptbin, Float_t norm){
TString hisName=Form("hproj%s%dv%d",GetName(),secondVar,firstVar);
TString hisTit=Form("%s vs. %s",fAxisTitles[secondVar].Data(),fAxisTitles[firstVar].Data());
TH2F* h2=new TH2F(hisName.Data(),hisTit.Data(),fNCutSteps[firstVar],fMinLimits[firstVar],fMaxLimits[firstVar],fNCutSteps[secondVar],fMinLimits[secondVar],fMaxLimits[secondVar]);
Int_t index[fgkMaxNVariables];
for(Int_t i=0;i<fNVariables;i++){
index[i]=fixedVars[i];
}
for(Int_t i=0;i<fNCutSteps[firstVar];i++){
for(Int_t j=0;j<fNCutSteps[secondVar];j++){
index[firstVar]=i;
index[secondVar]=j;
Float_t cont=GetElement(index,ptbin)/norm;
Int_t bin1=i+1;
if(!fGreaterThan[firstVar]) bin1=fNCutSteps[firstVar]-i;
Int_t bin2=j+1;
if(!fGreaterThan[secondVar]) bin2=fNCutSteps[secondVar]-j;
h2->SetBinContent(bin1,bin2,cont);
}
}
return h2;
}
void AliMultiDimVector::GetIntegrationLimits(Int_t iVar, Int_t iCell, Int_t& minbin, Int_t& maxbin) const {
minbin=0;
maxbin=0;
if(iVar<fNVariables){
minbin=iCell;
maxbin=fNCutSteps[iVar]-1;
}
}
void AliMultiDimVector::GetFillRange(Int_t iVar, Int_t iCell, Int_t& minbin, Int_t& maxbin) const {
minbin=0;
maxbin=0;
if(iVar<fNVariables){
minbin=0;
maxbin=iCell;
}
}
void AliMultiDimVector::Integrate(){
if(fIsIntegrated){
AliError("MultiDimVector already integrated");
return;
}
TArrayF integral(fNTotCells);
for(ULong64_t i=0;i<fNTotCells;i++) integral[i]=CountsAboveCell(i);
for(ULong64_t i=0;i<fNTotCells;i++) fVett[i]= integral[i];
fIsIntegrated=kTRUE;
}
ULong64_t* AliMultiDimVector::GetGlobalAddressesAboveCuts(const Float_t *values, Int_t ptbin, Int_t& nVals) const{
Int_t ind[fgkMaxNVariables];
Bool_t retcode=GetIndicesFromValues(values,ind);
if(!retcode){
nVals=0;
return 0x0;
}
for(Int_t i=fNVariables; i<fgkMaxNVariables; i++) ind[i]=0;
Int_t mink[fgkMaxNVariables];
Int_t maxk[fgkMaxNVariables];
Int_t size=1;
for(Int_t i=0;i<fgkMaxNVariables;i++){
GetFillRange(i,ind[i],mink[i],maxk[i]);
size*=(maxk[i]-mink[i]+1);
}
ULong64_t* indexes=new ULong64_t[size];
nVals=0;
for(Int_t k0=mink[0]; k0<=maxk[0]; k0++){
for(Int_t k1=mink[1]; k1<=maxk[1]; k1++){
for(Int_t k2=mink[2]; k2<=maxk[2]; k2++){
for(Int_t k3=mink[3]; k3<=maxk[3]; k3++){
for(Int_t k4=mink[4]; k4<=maxk[4]; k4++){
for(Int_t k5=mink[5]; k5<=maxk[5]; k5++){
for(Int_t k6=mink[6]; k6<=maxk[6]; k6++){
for(Int_t k7=mink[7]; k7<=maxk[7]; k7++){
for(Int_t k8=mink[8]; k8<=maxk[8]; k8++){
for(Int_t k9=mink[9]; k9<=maxk[9]; k9++){
Int_t currentBin[fgkMaxNVariables]={k0,k1,k2,k3,k4,k5,k6,k7,k8,k9};
indexes[nVals++]=GetGlobalAddressFromIndices(currentBin,ptbin);
}
}
}
}
}
}
}
}
}
}
return indexes;
}
Float_t AliMultiDimVector::CountsAboveCell(ULong64_t globadd) const{
Int_t ind[fgkMaxNVariables];
Int_t ptbin;
GetIndicesFromGlobalAddress(globadd,ind,ptbin);
for(Int_t i=fNVariables; i<fgkMaxNVariables; i++) ind[i]=0;
Int_t mink[fgkMaxNVariables];
Int_t maxk[fgkMaxNVariables];
for(Int_t i=0;i<fgkMaxNVariables;i++){
GetIntegrationLimits(i,ind[i],mink[i],maxk[i]);
}
Float_t sumcont=0.;
for(Int_t k0=mink[0]; k0<=maxk[0]; k0++){
for(Int_t k1=mink[1]; k1<=maxk[1]; k1++){
for(Int_t k2=mink[2]; k2<=maxk[2]; k2++){
for(Int_t k3=mink[3]; k3<=maxk[3]; k3++){
for(Int_t k4=mink[4]; k4<=maxk[4]; k4++){
for(Int_t k5=mink[5]; k5<=maxk[5]; k5++){
for(Int_t k6=mink[6]; k6<=maxk[6]; k6++){
for(Int_t k7=mink[7]; k7<=maxk[7]; k7++){
for(Int_t k8=mink[8]; k8<=maxk[8]; k8++){
for(Int_t k9=mink[9]; k9<=maxk[9]; k9++){
Int_t currentBin[fgkMaxNVariables]={k0,k1,k2,k3,k4,k5,k6,k7,k8,k9};
sumcont+=GetElement(currentBin,ptbin);
}
}
}
}
}
}
}
}
}
}
return sumcont;
}
void AliMultiDimVector::Fill(Float_t* values, Int_t ptbin){
if(fIsIntegrated){
AliError("MultiDimVector already integrated -- Use FillAndIntegrate");
return;
}
Int_t ind[fgkMaxNVariables];
Bool_t retcode=GetIndicesFromValues(values,ind);
for(Int_t i=fNVariables; i<fgkMaxNVariables; i++) ind[i]=0;
if(retcode) IncrementElement(ind,ptbin);
}
void AliMultiDimVector::FillAndIntegrate(Float_t* values, Int_t ptbin){
fIsIntegrated=kTRUE;
Int_t ind[fgkMaxNVariables];
Bool_t retcode=GetIndicesFromValues(values,ind);
if(!retcode) return;
for(Int_t i=fNVariables; i<fgkMaxNVariables; i++) ind[i]=0;
Int_t mink[fgkMaxNVariables];
Int_t maxk[fgkMaxNVariables];
for(Int_t i=0;i<fgkMaxNVariables;i++){
GetFillRange(i,ind[i],mink[i],maxk[i]);
}
for(Int_t k0=mink[0]; k0<=maxk[0]; k0++){
for(Int_t k1=mink[1]; k1<=maxk[1]; k1++){
for(Int_t k2=mink[2]; k2<=maxk[2]; k2++){
for(Int_t k3=mink[3]; k3<=maxk[3]; k3++){
for(Int_t k4=mink[4]; k4<=maxk[4]; k4++){
for(Int_t k5=mink[5]; k5<=maxk[5]; k5++){
for(Int_t k6=mink[6]; k6<=maxk[6]; k6++){
for(Int_t k7=mink[7]; k7<=maxk[7]; k7++){
for(Int_t k8=mink[8]; k8<=maxk[8]; k8++){
for(Int_t k9=mink[9]; k9<=maxk[9]; k9++){
Int_t currentBin[fgkMaxNVariables]={k0,k1,k2,k3,k4,k5,k6,k7,k8,k9};
IncrementElement(currentBin,ptbin);
}
}
}
}
}
}
}
}
}
}
}
void AliMultiDimVector::SuppressZeroBKGEffect(const AliMultiDimVector* mvBKG){
for(ULong64_t i=0;i<fNTotCells;i++)
if(mvBKG->GetElement(i)<0.00000001) fVett.AddAt(0,i);
}
AliMultiDimVector* AliMultiDimVector:: ShrinkPtBins(Int_t firstBin, Int_t lastBin){
if(firstBin<0 || lastBin>=fNPtBins || firstBin>=lastBin){
AliError("Bad numbers of Pt bins to be shrinked");
return 0;
}
Int_t nofcells[fgkMaxNVariables];
Float_t loosecuts[fgkMaxNVariables];
Float_t tightcuts[fgkMaxNVariables];
TString axisTitles[fgkMaxNVariables];
for(Int_t j=0;j<fgkMaxNVariables;j++) {
nofcells[j]=0;
loosecuts[j]=0.;
tightcuts[j]=0.;
axisTitles[j]="";
}
for(Int_t i=0;i<fNVariables;i++){
nofcells[i]=fNCutSteps[i];
if(fGreaterThan[i]){
loosecuts[i]=fMinLimits[i];
tightcuts[i]=fMaxLimits[i];
}else{
loosecuts[i]=fMaxLimits[i];
tightcuts[i]=fMinLimits[i];
}
axisTitles[i]=fAxisTitles[i];
}
Int_t newNptbins=fNPtBins-(lastBin-firstBin);
Float_t ptlimits[fgkMaxNPtBins+1];
for(Int_t ipt=0; ipt<=firstBin;ipt++) ptlimits[ipt]=fPtLimits[ipt];
for(Int_t ipt=firstBin+1; ipt<newNptbins+1;ipt++) ptlimits[ipt]=fPtLimits[ipt+(lastBin-firstBin)];
AliMultiDimVector* shrinkedMV=new AliMultiDimVector(GetName(),GetTitle(),newNptbins,ptlimits,fNVariables,nofcells,loosecuts,tightcuts,axisTitles);
ULong64_t nOfPointsPerPtbin=fNTotCells/fNPtBins;
ULong64_t addressOld,addressNew;
Int_t npb,opb;
for(npb=0;npb<firstBin;npb++){
opb=npb;
for(ULong64_t k=0;k<nOfPointsPerPtbin;k++){
addressOld=opb+k*fNPtBins;
addressNew=npb+k*newNptbins;
shrinkedMV->SetElement(addressNew,fVett[addressOld]);
}
}
npb=firstBin;
for(ULong64_t k=0;k<nOfPointsPerPtbin;k++){
Float_t summedValue=0.;
for(opb=firstBin;opb<=lastBin;opb++){
addressOld=opb+k*fNPtBins;
summedValue+=fVett[addressOld];
}
addressNew=npb+k*newNptbins;
shrinkedMV->SetElement(addressNew,summedValue);
}
for(npb=firstBin+1;npb<newNptbins;npb++){
opb=npb+(lastBin-firstBin);
for(ULong64_t k=0;k<nOfPointsPerPtbin;k++){
addressOld=opb+k*fNPtBins;
addressNew=npb+k*newNptbins;
shrinkedMV->SetElement(addressNew,fVett[addressOld]);
}
}
return shrinkedMV;
}
void AliMultiDimVector::SetNewLimits(Float_t* loose,Float_t* tight){
for(Int_t i=0;i<fNVariables;i++){
if(loose[i] < tight[i]){
fMinLimits[i]=loose[i];
fMaxLimits[i]=tight[i];
fGreaterThan[i]=kTRUE;
}else{
fMinLimits[i]=tight[i];
fMaxLimits[i]=loose[i];
fGreaterThan[i]=kFALSE;
}
}
}
void AliMultiDimVector::SwapLimits(Int_t ivar){
Float_t oldmin = fMinLimits[ivar];
fMinLimits[ivar] = fMaxLimits[ivar];
fMaxLimits[ivar] = oldmin;
if(fGreaterThan[ivar])fGreaterThan[ivar]=kFALSE;
else fGreaterThan[ivar]=kTRUE;
}
void AliMultiDimVector::PrintStatus(){
printf("Number of Pt bins = %d\n",fNPtBins);
printf("Limits of Pt bins = ");
for(Int_t ib=0;ib<fNPtBins+1;ib++) printf("%6.2f ",fPtLimits[ib]);
printf("\n");
printf("Number of cut variables = %d\n",fNVariables);
for(Int_t iv=0;iv<fNVariables;iv++){
printf("- Variable %d: %s\n",iv,fAxisTitles[iv].Data());
printf(" Nsteps= %d Rage = %6.2f %6.2f\n",
fNCutSteps[iv],fMinLimits[iv],fMaxLimits[iv]);
}
}
AliMultiDimVector.cxx:100 AliMultiDimVector.cxx:101 AliMultiDimVector.cxx:102 AliMultiDimVector.cxx:103 AliMultiDimVector.cxx:104 AliMultiDimVector.cxx:105 AliMultiDimVector.cxx:106 AliMultiDimVector.cxx:107 AliMultiDimVector.cxx:108 AliMultiDimVector.cxx:109 AliMultiDimVector.cxx:110 AliMultiDimVector.cxx:111 AliMultiDimVector.cxx:112 AliMultiDimVector.cxx:113 AliMultiDimVector.cxx:114 AliMultiDimVector.cxx:115 AliMultiDimVector.cxx:116 AliMultiDimVector.cxx:117 AliMultiDimVector.cxx:118 AliMultiDimVector.cxx:119 AliMultiDimVector.cxx:120 AliMultiDimVector.cxx:121 AliMultiDimVector.cxx:122 AliMultiDimVector.cxx:123 AliMultiDimVector.cxx:124 AliMultiDimVector.cxx:125 AliMultiDimVector.cxx:126 AliMultiDimVector.cxx:127 AliMultiDimVector.cxx:128 AliMultiDimVector.cxx:129 AliMultiDimVector.cxx:130 AliMultiDimVector.cxx:131 AliMultiDimVector.cxx:132 AliMultiDimVector.cxx:133 AliMultiDimVector.cxx:134 AliMultiDimVector.cxx:135 AliMultiDimVector.cxx:136 AliMultiDimVector.cxx:137 AliMultiDimVector.cxx:138 AliMultiDimVector.cxx:139 AliMultiDimVector.cxx:140 AliMultiDimVector.cxx:141 AliMultiDimVector.cxx:142 AliMultiDimVector.cxx:143 AliMultiDimVector.cxx:144 AliMultiDimVector.cxx:145 AliMultiDimVector.cxx:146 AliMultiDimVector.cxx:147 AliMultiDimVector.cxx:148 AliMultiDimVector.cxx:149 AliMultiDimVector.cxx:150 AliMultiDimVector.cxx:151 AliMultiDimVector.cxx:152 AliMultiDimVector.cxx:153 AliMultiDimVector.cxx:154 AliMultiDimVector.cxx:155 AliMultiDimVector.cxx:156 AliMultiDimVector.cxx:157 AliMultiDimVector.cxx:158 AliMultiDimVector.cxx:159 AliMultiDimVector.cxx:160 AliMultiDimVector.cxx:161 AliMultiDimVector.cxx:162 AliMultiDimVector.cxx:163 AliMultiDimVector.cxx:164 AliMultiDimVector.cxx:165 AliMultiDimVector.cxx:166 AliMultiDimVector.cxx:167 AliMultiDimVector.cxx:168 AliMultiDimVector.cxx:169 AliMultiDimVector.cxx:170 AliMultiDimVector.cxx:171 AliMultiDimVector.cxx:172 AliMultiDimVector.cxx:173 AliMultiDimVector.cxx:174 AliMultiDimVector.cxx:175 AliMultiDimVector.cxx:176 AliMultiDimVector.cxx:177 AliMultiDimVector.cxx:178 AliMultiDimVector.cxx:179 AliMultiDimVector.cxx:180 AliMultiDimVector.cxx:181 AliMultiDimVector.cxx:182 AliMultiDimVector.cxx:183 AliMultiDimVector.cxx:184 AliMultiDimVector.cxx:185 AliMultiDimVector.cxx:186 AliMultiDimVector.cxx:187 AliMultiDimVector.cxx:188 AliMultiDimVector.cxx:189 AliMultiDimVector.cxx:190 AliMultiDimVector.cxx:191 AliMultiDimVector.cxx:192 AliMultiDimVector.cxx:193 AliMultiDimVector.cxx:194 AliMultiDimVector.cxx:195 AliMultiDimVector.cxx:196 AliMultiDimVector.cxx:197 AliMultiDimVector.cxx:198 AliMultiDimVector.cxx:199 AliMultiDimVector.cxx:200 AliMultiDimVector.cxx:201 AliMultiDimVector.cxx:202 AliMultiDimVector.cxx:203 AliMultiDimVector.cxx:204 AliMultiDimVector.cxx:205 AliMultiDimVector.cxx:206 AliMultiDimVector.cxx:207 AliMultiDimVector.cxx:208 AliMultiDimVector.cxx:209 AliMultiDimVector.cxx:210 AliMultiDimVector.cxx:211 AliMultiDimVector.cxx:212 AliMultiDimVector.cxx:213 AliMultiDimVector.cxx:214 AliMultiDimVector.cxx:215 AliMultiDimVector.cxx:216 AliMultiDimVector.cxx:217 AliMultiDimVector.cxx:218 AliMultiDimVector.cxx:219 AliMultiDimVector.cxx:220 AliMultiDimVector.cxx:221 AliMultiDimVector.cxx:222 AliMultiDimVector.cxx:223 AliMultiDimVector.cxx:224 AliMultiDimVector.cxx:225 AliMultiDimVector.cxx:226 AliMultiDimVector.cxx:227 AliMultiDimVector.cxx:228 AliMultiDimVector.cxx:229 AliMultiDimVector.cxx:230 AliMultiDimVector.cxx:231 AliMultiDimVector.cxx:232 AliMultiDimVector.cxx:233 AliMultiDimVector.cxx:234 AliMultiDimVector.cxx:235 AliMultiDimVector.cxx:236 AliMultiDimVector.cxx:237 AliMultiDimVector.cxx:238 AliMultiDimVector.cxx:239 AliMultiDimVector.cxx:240 AliMultiDimVector.cxx:241 AliMultiDimVector.cxx:242 AliMultiDimVector.cxx:243 AliMultiDimVector.cxx:244 AliMultiDimVector.cxx:245 AliMultiDimVector.cxx:246 AliMultiDimVector.cxx:247 AliMultiDimVector.cxx:248 AliMultiDimVector.cxx:249 AliMultiDimVector.cxx:250 AliMultiDimVector.cxx:251 AliMultiDimVector.cxx:252 AliMultiDimVector.cxx:253 AliMultiDimVector.cxx:254 AliMultiDimVector.cxx:255 AliMultiDimVector.cxx:256 AliMultiDimVector.cxx:257 AliMultiDimVector.cxx:258 AliMultiDimVector.cxx:259 AliMultiDimVector.cxx:260 AliMultiDimVector.cxx:261 AliMultiDimVector.cxx:262 AliMultiDimVector.cxx:263 AliMultiDimVector.cxx:264 AliMultiDimVector.cxx:265 AliMultiDimVector.cxx:266 AliMultiDimVector.cxx:267 AliMultiDimVector.cxx:268 AliMultiDimVector.cxx:269 AliMultiDimVector.cxx:270 AliMultiDimVector.cxx:271 AliMultiDimVector.cxx:272 AliMultiDimVector.cxx:273 AliMultiDimVector.cxx:274 AliMultiDimVector.cxx:275 AliMultiDimVector.cxx:276 AliMultiDimVector.cxx:277 AliMultiDimVector.cxx:278 AliMultiDimVector.cxx:279 AliMultiDimVector.cxx:280 AliMultiDimVector.cxx:281 AliMultiDimVector.cxx:282 AliMultiDimVector.cxx:283 AliMultiDimVector.cxx:284 AliMultiDimVector.cxx:285 AliMultiDimVector.cxx:286 AliMultiDimVector.cxx:287 AliMultiDimVector.cxx:288 AliMultiDimVector.cxx:289 AliMultiDimVector.cxx:290 AliMultiDimVector.cxx:291 AliMultiDimVector.cxx:292 AliMultiDimVector.cxx:293 AliMultiDimVector.cxx:294 AliMultiDimVector.cxx:295 AliMultiDimVector.cxx:296 AliMultiDimVector.cxx:297 AliMultiDimVector.cxx:298 AliMultiDimVector.cxx:299 AliMultiDimVector.cxx:300 AliMultiDimVector.cxx:301 AliMultiDimVector.cxx:302 AliMultiDimVector.cxx:303 AliMultiDimVector.cxx:304 AliMultiDimVector.cxx:305 AliMultiDimVector.cxx:306 AliMultiDimVector.cxx:307 AliMultiDimVector.cxx:308 AliMultiDimVector.cxx:309 AliMultiDimVector.cxx:310 AliMultiDimVector.cxx:311 AliMultiDimVector.cxx:312 AliMultiDimVector.cxx:313 AliMultiDimVector.cxx:314 AliMultiDimVector.cxx:315 AliMultiDimVector.cxx:316 AliMultiDimVector.cxx:317 AliMultiDimVector.cxx:318 AliMultiDimVector.cxx:319 AliMultiDimVector.cxx:320 AliMultiDimVector.cxx:321 AliMultiDimVector.cxx:322 AliMultiDimVector.cxx:323 AliMultiDimVector.cxx:324 AliMultiDimVector.cxx:325 AliMultiDimVector.cxx:326 AliMultiDimVector.cxx:327 AliMultiDimVector.cxx:328 AliMultiDimVector.cxx:329 AliMultiDimVector.cxx:330 AliMultiDimVector.cxx:331 AliMultiDimVector.cxx:332 AliMultiDimVector.cxx:333 AliMultiDimVector.cxx:334 AliMultiDimVector.cxx:335 AliMultiDimVector.cxx:336 AliMultiDimVector.cxx:337 AliMultiDimVector.cxx:338 AliMultiDimVector.cxx:339 AliMultiDimVector.cxx:340 AliMultiDimVector.cxx:341 AliMultiDimVector.cxx:342 AliMultiDimVector.cxx:343 AliMultiDimVector.cxx:344 AliMultiDimVector.cxx:345 AliMultiDimVector.cxx:346 AliMultiDimVector.cxx:347 AliMultiDimVector.cxx:348 AliMultiDimVector.cxx:349 AliMultiDimVector.cxx:350 AliMultiDimVector.cxx:351 AliMultiDimVector.cxx:352 AliMultiDimVector.cxx:353 AliMultiDimVector.cxx:354 AliMultiDimVector.cxx:355 AliMultiDimVector.cxx:356 AliMultiDimVector.cxx:357 AliMultiDimVector.cxx:358 AliMultiDimVector.cxx:359 AliMultiDimVector.cxx:360 AliMultiDimVector.cxx:361 AliMultiDimVector.cxx:362 AliMultiDimVector.cxx:363 AliMultiDimVector.cxx:364 AliMultiDimVector.cxx:365 AliMultiDimVector.cxx:366 AliMultiDimVector.cxx:367 AliMultiDimVector.cxx:368 AliMultiDimVector.cxx:369 AliMultiDimVector.cxx:370 AliMultiDimVector.cxx:371 AliMultiDimVector.cxx:372 AliMultiDimVector.cxx:373 AliMultiDimVector.cxx:374 AliMultiDimVector.cxx:375 AliMultiDimVector.cxx:376 AliMultiDimVector.cxx:377 AliMultiDimVector.cxx:378 AliMultiDimVector.cxx:379 AliMultiDimVector.cxx:380 AliMultiDimVector.cxx:381 AliMultiDimVector.cxx:382 AliMultiDimVector.cxx:383 AliMultiDimVector.cxx:384 AliMultiDimVector.cxx:385 AliMultiDimVector.cxx:386 AliMultiDimVector.cxx:387 AliMultiDimVector.cxx:388 AliMultiDimVector.cxx:389 AliMultiDimVector.cxx:390 AliMultiDimVector.cxx:391 AliMultiDimVector.cxx:392 AliMultiDimVector.cxx:393 AliMultiDimVector.cxx:394 AliMultiDimVector.cxx:395 AliMultiDimVector.cxx:396 AliMultiDimVector.cxx:397 AliMultiDimVector.cxx:398 AliMultiDimVector.cxx:399 AliMultiDimVector.cxx:400 AliMultiDimVector.cxx:401 AliMultiDimVector.cxx:402 AliMultiDimVector.cxx:403 AliMultiDimVector.cxx:404 AliMultiDimVector.cxx:405 AliMultiDimVector.cxx:406 AliMultiDimVector.cxx:407 AliMultiDimVector.cxx:408 AliMultiDimVector.cxx:409 AliMultiDimVector.cxx:410 AliMultiDimVector.cxx:411 AliMultiDimVector.cxx:412 AliMultiDimVector.cxx:413 AliMultiDimVector.cxx:414 AliMultiDimVector.cxx:415 AliMultiDimVector.cxx:416 AliMultiDimVector.cxx:417 AliMultiDimVector.cxx:418 AliMultiDimVector.cxx:419 AliMultiDimVector.cxx:420 AliMultiDimVector.cxx:421 AliMultiDimVector.cxx:422 AliMultiDimVector.cxx:423 AliMultiDimVector.cxx:424 AliMultiDimVector.cxx:425 AliMultiDimVector.cxx:426 AliMultiDimVector.cxx:427 AliMultiDimVector.cxx:428 AliMultiDimVector.cxx:429 AliMultiDimVector.cxx:430 AliMultiDimVector.cxx:431 AliMultiDimVector.cxx:432 AliMultiDimVector.cxx:433 AliMultiDimVector.cxx:434 AliMultiDimVector.cxx:435 AliMultiDimVector.cxx:436 AliMultiDimVector.cxx:437 AliMultiDimVector.cxx:438 AliMultiDimVector.cxx:439 AliMultiDimVector.cxx:440 AliMultiDimVector.cxx:441 AliMultiDimVector.cxx:442 AliMultiDimVector.cxx:443 AliMultiDimVector.cxx:444 AliMultiDimVector.cxx:445 AliMultiDimVector.cxx:446 AliMultiDimVector.cxx:447 AliMultiDimVector.cxx:448 AliMultiDimVector.cxx:449 AliMultiDimVector.cxx:450 AliMultiDimVector.cxx:451 AliMultiDimVector.cxx:452 AliMultiDimVector.cxx:453 AliMultiDimVector.cxx:454 AliMultiDimVector.cxx:455 AliMultiDimVector.cxx:456 AliMultiDimVector.cxx:457 AliMultiDimVector.cxx:458 AliMultiDimVector.cxx:459 AliMultiDimVector.cxx:460 AliMultiDimVector.cxx:461 AliMultiDimVector.cxx:462 AliMultiDimVector.cxx:463 AliMultiDimVector.cxx:464 AliMultiDimVector.cxx:465 AliMultiDimVector.cxx:466 AliMultiDimVector.cxx:467 AliMultiDimVector.cxx:468 AliMultiDimVector.cxx:469 AliMultiDimVector.cxx:470 AliMultiDimVector.cxx:471 AliMultiDimVector.cxx:472 AliMultiDimVector.cxx:473 AliMultiDimVector.cxx:474 AliMultiDimVector.cxx:475 AliMultiDimVector.cxx:476 AliMultiDimVector.cxx:477 AliMultiDimVector.cxx:478 AliMultiDimVector.cxx:479 AliMultiDimVector.cxx:480 AliMultiDimVector.cxx:481 AliMultiDimVector.cxx:482 AliMultiDimVector.cxx:483 AliMultiDimVector.cxx:484 AliMultiDimVector.cxx:485 AliMultiDimVector.cxx:486 AliMultiDimVector.cxx:487 AliMultiDimVector.cxx:488 AliMultiDimVector.cxx:489 AliMultiDimVector.cxx:490 AliMultiDimVector.cxx:491 AliMultiDimVector.cxx:492 AliMultiDimVector.cxx:493 AliMultiDimVector.cxx:494 AliMultiDimVector.cxx:495 AliMultiDimVector.cxx:496 AliMultiDimVector.cxx:497 AliMultiDimVector.cxx:498 AliMultiDimVector.cxx:499 AliMultiDimVector.cxx:500 AliMultiDimVector.cxx:501 AliMultiDimVector.cxx:502 AliMultiDimVector.cxx:503 AliMultiDimVector.cxx:504 AliMultiDimVector.cxx:505 AliMultiDimVector.cxx:506 AliMultiDimVector.cxx:507 AliMultiDimVector.cxx:508 AliMultiDimVector.cxx:509 AliMultiDimVector.cxx:510 AliMultiDimVector.cxx:511 AliMultiDimVector.cxx:512 AliMultiDimVector.cxx:513 AliMultiDimVector.cxx:514 AliMultiDimVector.cxx:515 AliMultiDimVector.cxx:516 AliMultiDimVector.cxx:517 AliMultiDimVector.cxx:518 AliMultiDimVector.cxx:519 AliMultiDimVector.cxx:520 AliMultiDimVector.cxx:521 AliMultiDimVector.cxx:522 AliMultiDimVector.cxx:523 AliMultiDimVector.cxx:524 AliMultiDimVector.cxx:525 AliMultiDimVector.cxx:526 AliMultiDimVector.cxx:527 AliMultiDimVector.cxx:528 AliMultiDimVector.cxx:529 AliMultiDimVector.cxx:530 AliMultiDimVector.cxx:531 AliMultiDimVector.cxx:532 AliMultiDimVector.cxx:533 AliMultiDimVector.cxx:534 AliMultiDimVector.cxx:535 AliMultiDimVector.cxx:536 AliMultiDimVector.cxx:537 AliMultiDimVector.cxx:538 AliMultiDimVector.cxx:539 AliMultiDimVector.cxx:540 AliMultiDimVector.cxx:541 AliMultiDimVector.cxx:542 AliMultiDimVector.cxx:543 AliMultiDimVector.cxx:544 AliMultiDimVector.cxx:545 AliMultiDimVector.cxx:546 AliMultiDimVector.cxx:547 AliMultiDimVector.cxx:548 AliMultiDimVector.cxx:549 AliMultiDimVector.cxx:550 AliMultiDimVector.cxx:551 AliMultiDimVector.cxx:552 AliMultiDimVector.cxx:553 AliMultiDimVector.cxx:554 AliMultiDimVector.cxx:555 AliMultiDimVector.cxx:556 AliMultiDimVector.cxx:557 AliMultiDimVector.cxx:558 AliMultiDimVector.cxx:559 AliMultiDimVector.cxx:560 AliMultiDimVector.cxx:561 AliMultiDimVector.cxx:562 AliMultiDimVector.cxx:563 AliMultiDimVector.cxx:564 AliMultiDimVector.cxx:565 AliMultiDimVector.cxx:566 AliMultiDimVector.cxx:567 AliMultiDimVector.cxx:568 AliMultiDimVector.cxx:569 AliMultiDimVector.cxx:570 AliMultiDimVector.cxx:571 AliMultiDimVector.cxx:572 AliMultiDimVector.cxx:573 AliMultiDimVector.cxx:574 AliMultiDimVector.cxx:575 AliMultiDimVector.cxx:576 AliMultiDimVector.cxx:577 AliMultiDimVector.cxx:578 AliMultiDimVector.cxx:579 AliMultiDimVector.cxx:580 AliMultiDimVector.cxx:581 AliMultiDimVector.cxx:582 AliMultiDimVector.cxx:583 AliMultiDimVector.cxx:584 AliMultiDimVector.cxx:585 AliMultiDimVector.cxx:586 AliMultiDimVector.cxx:587 AliMultiDimVector.cxx:588 AliMultiDimVector.cxx:589 AliMultiDimVector.cxx:590 AliMultiDimVector.cxx:591 AliMultiDimVector.cxx:592 AliMultiDimVector.cxx:593 AliMultiDimVector.cxx:594 AliMultiDimVector.cxx:595 AliMultiDimVector.cxx:596 AliMultiDimVector.cxx:597 AliMultiDimVector.cxx:598 AliMultiDimVector.cxx:599 AliMultiDimVector.cxx:600 AliMultiDimVector.cxx:601 AliMultiDimVector.cxx:602 AliMultiDimVector.cxx:603 AliMultiDimVector.cxx:604 AliMultiDimVector.cxx:605 AliMultiDimVector.cxx:606 AliMultiDimVector.cxx:607 AliMultiDimVector.cxx:608 AliMultiDimVector.cxx:609 AliMultiDimVector.cxx:610 AliMultiDimVector.cxx:611 AliMultiDimVector.cxx:612 AliMultiDimVector.cxx:613 AliMultiDimVector.cxx:614 AliMultiDimVector.cxx:615 AliMultiDimVector.cxx:616 AliMultiDimVector.cxx:617 AliMultiDimVector.cxx:618 AliMultiDimVector.cxx:619 AliMultiDimVector.cxx:620 AliMultiDimVector.cxx:621 AliMultiDimVector.cxx:622 AliMultiDimVector.cxx:623 AliMultiDimVector.cxx:624 AliMultiDimVector.cxx:625 AliMultiDimVector.cxx:626 AliMultiDimVector.cxx:627 AliMultiDimVector.cxx:628 AliMultiDimVector.cxx:629 AliMultiDimVector.cxx:630 AliMultiDimVector.cxx:631 AliMultiDimVector.cxx:632 AliMultiDimVector.cxx:633 AliMultiDimVector.cxx:634 AliMultiDimVector.cxx:635 AliMultiDimVector.cxx:636 AliMultiDimVector.cxx:637 AliMultiDimVector.cxx:638 AliMultiDimVector.cxx:639 AliMultiDimVector.cxx:640 AliMultiDimVector.cxx:641 AliMultiDimVector.cxx:642 AliMultiDimVector.cxx:643 AliMultiDimVector.cxx:644 AliMultiDimVector.cxx:645 AliMultiDimVector.cxx:646 AliMultiDimVector.cxx:647 AliMultiDimVector.cxx:648 AliMultiDimVector.cxx:649 AliMultiDimVector.cxx:650 AliMultiDimVector.cxx:651 AliMultiDimVector.cxx:652 AliMultiDimVector.cxx:653 AliMultiDimVector.cxx:654 AliMultiDimVector.cxx:655 AliMultiDimVector.cxx:656 AliMultiDimVector.cxx:657 AliMultiDimVector.cxx:658 AliMultiDimVector.cxx:659 AliMultiDimVector.cxx:660 AliMultiDimVector.cxx:661 AliMultiDimVector.cxx:662 AliMultiDimVector.cxx:663 AliMultiDimVector.cxx:664 AliMultiDimVector.cxx:665 AliMultiDimVector.cxx:666 AliMultiDimVector.cxx:667 AliMultiDimVector.cxx:668 AliMultiDimVector.cxx:669 AliMultiDimVector.cxx:670 AliMultiDimVector.cxx:671 AliMultiDimVector.cxx:672 AliMultiDimVector.cxx:673 AliMultiDimVector.cxx:674 AliMultiDimVector.cxx:675 AliMultiDimVector.cxx:676 AliMultiDimVector.cxx:677 AliMultiDimVector.cxx:678 AliMultiDimVector.cxx:679 AliMultiDimVector.cxx:680 AliMultiDimVector.cxx:681 AliMultiDimVector.cxx:682 AliMultiDimVector.cxx:683 AliMultiDimVector.cxx:684 AliMultiDimVector.cxx:685 AliMultiDimVector.cxx:686 AliMultiDimVector.cxx:687 AliMultiDimVector.cxx:688 AliMultiDimVector.cxx:689 AliMultiDimVector.cxx:690 AliMultiDimVector.cxx:691 AliMultiDimVector.cxx:692 AliMultiDimVector.cxx:693 AliMultiDimVector.cxx:694 AliMultiDimVector.cxx:695 AliMultiDimVector.cxx:696 AliMultiDimVector.cxx:697 AliMultiDimVector.cxx:698 AliMultiDimVector.cxx:699 AliMultiDimVector.cxx:700 AliMultiDimVector.cxx:701 AliMultiDimVector.cxx:702 AliMultiDimVector.cxx:703 AliMultiDimVector.cxx:704 AliMultiDimVector.cxx:705 AliMultiDimVector.cxx:706 AliMultiDimVector.cxx:707 AliMultiDimVector.cxx:708 AliMultiDimVector.cxx:709 AliMultiDimVector.cxx:710 AliMultiDimVector.cxx:711 AliMultiDimVector.cxx:712 AliMultiDimVector.cxx:713 AliMultiDimVector.cxx:714 AliMultiDimVector.cxx:715 AliMultiDimVector.cxx:716 AliMultiDimVector.cxx:717 AliMultiDimVector.cxx:718 AliMultiDimVector.cxx:719 AliMultiDimVector.cxx:720 AliMultiDimVector.cxx:721 AliMultiDimVector.cxx:722 AliMultiDimVector.cxx:723 AliMultiDimVector.cxx:724 AliMultiDimVector.cxx:725 AliMultiDimVector.cxx:726 AliMultiDimVector.cxx:727 AliMultiDimVector.cxx:728 AliMultiDimVector.cxx:729 AliMultiDimVector.cxx:730 AliMultiDimVector.cxx:731 AliMultiDimVector.cxx:732 AliMultiDimVector.cxx:733 AliMultiDimVector.cxx:734 AliMultiDimVector.cxx:735 AliMultiDimVector.cxx:736 AliMultiDimVector.cxx:737 AliMultiDimVector.cxx:738 AliMultiDimVector.cxx:739 AliMultiDimVector.cxx:740 AliMultiDimVector.cxx:741 AliMultiDimVector.cxx:742 AliMultiDimVector.cxx:743 AliMultiDimVector.cxx:744 AliMultiDimVector.cxx:745 AliMultiDimVector.cxx:746 AliMultiDimVector.cxx:747 AliMultiDimVector.cxx:748 AliMultiDimVector.cxx:749 AliMultiDimVector.cxx:750 AliMultiDimVector.cxx:751 AliMultiDimVector.cxx:752 AliMultiDimVector.cxx:753 AliMultiDimVector.cxx:754 AliMultiDimVector.cxx:755 AliMultiDimVector.cxx:756 AliMultiDimVector.cxx:757 AliMultiDimVector.cxx:758 AliMultiDimVector.cxx:759 AliMultiDimVector.cxx:760 AliMultiDimVector.cxx:761 AliMultiDimVector.cxx:762 AliMultiDimVector.cxx:763 AliMultiDimVector.cxx:764 AliMultiDimVector.cxx:765 AliMultiDimVector.cxx:766 AliMultiDimVector.cxx:767 AliMultiDimVector.cxx:768 AliMultiDimVector.cxx:769 AliMultiDimVector.cxx:770 AliMultiDimVector.cxx:771 AliMultiDimVector.cxx:772 AliMultiDimVector.cxx:773 AliMultiDimVector.cxx:774 AliMultiDimVector.cxx:775 AliMultiDimVector.cxx:776 AliMultiDimVector.cxx:777 AliMultiDimVector.cxx:778 AliMultiDimVector.cxx:779 AliMultiDimVector.cxx:780 AliMultiDimVector.cxx:781 AliMultiDimVector.cxx:782 AliMultiDimVector.cxx:783 AliMultiDimVector.cxx:784 AliMultiDimVector.cxx:785 AliMultiDimVector.cxx:786 AliMultiDimVector.cxx:787