ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
//
// static dNdPt helper functions
//
// basic functionality to select events and tracks 
// for dNdPt analysis
//
// Origin: Jan Fiete Grosse-Oetringhaus
// Modified and Extended: Jacek Otwinowski 19/11/2009
// last change: 2013-06-13 by M.Knichel
// 

#include <TROOT.h>
#include <TCanvas.h>
#include <TF1.h>
#include <TH1.h>
#include <TH2.h>
#include <TH3.h>

#include <AliHeader.h>
#include <AliStack.h>
#include <AliLog.h>
#include <AliESD.h>
#include <AliESDEvent.h>
#include <AliMCEvent.h>
#include <AliESDVertex.h>
#include <AliVertexerTracks.h>
#include <AliMathBase.h>
#include <AliESDtrackCuts.h>
#include <AliTracker.h>
#include "AlidNdPtEventCuts.h"
#include "AlidNdPtAcceptanceCuts.h"
#include <AliGenEventHeader.h>
#include <AliGenPythiaEventHeader.h>
#include <AliGenCocktailEventHeader.h>
#include <AliGenDPMjetEventHeader.h>
#include "AlidNdPtHelper.h"

//____________________________________________________________________
ClassImp(AlidNdPtHelper)

//____________________________________________________________________
const AliESDVertex* AlidNdPtHelper::GetVertex(AliESDEvent* const aEsd, const AlidNdPtEventCuts *const evtCuts, const AlidNdPtAcceptanceCuts *const accCuts, const AliESDtrackCuts *const trackCuts, AnalysisMode analysisMode, Bool_t debug, Bool_t bRedoTPC, Bool_t bUseMeanVertex)
{
  // Get the vertex from the ESD and returns it if the vertex is valid
  //
  // Second argument decides which vertex is used (this selects
  // also the quality criteria that are applied)

  if(!aEsd) 
  { 
    ::Error("AlidNdPtHelper::GetVertex()","esd event is NULL");
    return NULL;  
  }
 
  if(!evtCuts || !accCuts || !trackCuts) 
  { 
    ::Error("AlidNdPtHelper::GetVertex()","cuts not available");
    return NULL;  
  }

  const AliESDVertex* vertex = 0;
  AliESDVertex *initVertex = 0;
  if (analysisMode == kSPD || 
      analysisMode == kTPCSPDvtx || analysisMode == kTPCSPDvtxUpdate || analysisMode == kTPCITSHybrid)
  {
    vertex = aEsd->GetPrimaryVertexSPD();
    if (debug)
      Printf("AlidNdPtHelper::GetVertex: Returning SPD vertex");
  }  
  else if (analysisMode == kTPCITS  || analysisMode == kTPCTrackSPDvtx || analysisMode == kTPCTrackSPDvtxUpdate || 
           analysisMode == kTPCITSHybridTrackSPDvtx || analysisMode == kTPCITSHybridTrackSPDvtxDCArPt || 
	   analysisMode == kITSStandAloneTrackSPDvtx ||  analysisMode == kITSStandAloneTPCTrackSPDvtx)
  {
    vertex = aEsd->GetPrimaryVertexTracks();
    if(!vertex) return NULL;
    if(vertex->GetNContributors()<1) {
      // SPD vertex
      vertex = aEsd->GetPrimaryVertexSPD();
    }
  }
  else if (analysisMode == kTPC)
  {
    if(bRedoTPC) {

      Double_t kBz = aEsd->GetMagneticField();
      AliVertexerTracks vertexer(kBz);

      if(bUseMeanVertex) {
	 Double_t pos[3]={evtCuts->GetMeanXv(),evtCuts->GetMeanYv(),evtCuts->GetMeanZv()};
	 Double_t err[3]={evtCuts->GetSigmaMeanXv(),evtCuts->GetSigmaMeanYv(),evtCuts->GetSigmaMeanZv()};
	 initVertex = new AliESDVertex(pos,err);
	 vertexer.SetVtxStart(initVertex);
	 vertexer.SetConstraintOn();
      }

      Double_t maxDCAr = accCuts->GetMaxDCAr();
      Double_t maxDCAz = accCuts->GetMaxDCAz();
      Int_t minTPCClust = trackCuts->GetMinNClusterTPC();

      //vertexer.SetTPCMode(Double_t dcacut=0.1, Double_t dcacutIter0=1.0, Double_t maxd0z0=5.0, Int_t minCls=10, Int_t mintrks=1, Double_t nsigma=3., Double_t mindetfitter=0.1, Double_t maxtgl=1.5, Double_t fidR=3., Double_t fidZ=30., Int_t finderAlgo=1, Int_t finderAlgoIter0=4);
      vertexer.SetTPCMode(0.1,1.0,5.0,minTPCClust,1,3.,0.1,2.0,maxDCAr,maxDCAz,1,4);

      // TPC track preselection
      Int_t ntracks = aEsd->GetNumberOfTracks();
      TObjArray array(ntracks);
      UShort_t *id = new UShort_t[ntracks];


      Int_t count=0;
      for (Int_t i=0;i <ntracks; i++) {
        AliESDtrack *t = aEsd->GetTrack(i);
        if (!t) continue;
        if (t->Charge() == 0) continue;
        if (!t->GetTPCInnerParam()) continue;
        if (t->GetTPCNcls()<vertexer.GetMinClusters()) continue;
        AliExternalTrackParam  *tpcTrack  = new AliExternalTrackParam(*(t->GetTPCInnerParam()));
	if(tpcTrack) { 
	  array.AddLast(tpcTrack);
	  id[count] = (UShort_t)t->GetID();
	  count++;
	}
      } 
      AliESDVertex *vTPC = vertexer.VertexForSelectedTracks(&array,id, kTRUE, kTRUE, bUseMeanVertex);
      if(!vTPC) { 
        delete [] id; id=NULL;
        return 0;
      }
      
      // set recreated TPC vertex
      aEsd->SetPrimaryVertexTPC(vTPC);

      for (Int_t i=0; i<aEsd->GetNumberOfTracks(); i++) {
	AliESDtrack *t = aEsd->GetTrack(i);
	if(!t) continue;

        Double_t x[3]; t->GetXYZ(x);
        Double_t b[3]; AliTracker::GetBxByBz(x,b);
	Bool_t isOK = t->RelateToVertexTPCBxByBz(vTPC, b, kVeryBig);
        if(!isOK) continue;
      }
      
      delete vTPC;
      array.Delete();
      delete [] id; id=NULL;

    }
    vertex = aEsd->GetPrimaryVertexTPC();
    if (debug)
     Printf("AlidNdPtHelper::GetVertex: Returning vertex from tracks");
   }
   else
     Printf("AlidNdPtHelper::GetVertex: ERROR: Invalid second argument %d", analysisMode);

    if (!vertex) {
     if (debug)
      Printf("AlidNdPtHelper::GetVertex: No vertex found in ESD");
      return 0;
    }

  if (debug)
  {
    Printf("AlidNdPtHelper::GetVertex: Returning valid vertex: %s", vertex->GetTitle());
    vertex->Print();
  }
  
  if(initVertex) delete initVertex; initVertex=NULL;
  return vertex;
}

//____________________________________________________________________
Bool_t AlidNdPtHelper::TestRecVertex(const AliESDVertex* vertex, const AliESDVertex* vertexSPD, AnalysisMode analysisMode, Bool_t debug)
{
  // Checks if a vertex meets the needed quality criteria
  if(!vertex) return kFALSE;
  if(!vertex->GetStatus()) return kFALSE;

  Float_t requiredZResolution = -1;
  if (analysisMode == kSPD || analysisMode == kTPCITS || 
      analysisMode == kTPCSPDvtx || analysisMode == kTPCSPDvtxUpdate || analysisMode == kTPCITSHybrid ||
      analysisMode == kTPCTrackSPDvtx || analysisMode == kTPCTrackSPDvtxUpdate || analysisMode == kTPCITSHybridTrackSPDvtx || analysisMode == kTPCITSHybridTrackSPDvtxDCArPt
	   || analysisMode == kITSStandAloneTrackSPDvtx ||  analysisMode == kITSStandAloneTPCTrackSPDvtx)
  {
    requiredZResolution = 1000;
  }
  else if (analysisMode == kTPC)
    requiredZResolution = 10.;

  // check resolution
  Double_t zRes = vertex->GetZRes();

  if (zRes > requiredZResolution) {
    if (debug)
      Printf("AlidNdPtHelper::TestVertex: Resolution too poor %f (required: %f", zRes, requiredZResolution);
    return kFALSE;
  }

  // always check for SPD vertex
  if(!vertexSPD) return kFALSE;
  if(!vertexSPD->GetStatus()) return kFALSE;
  if (vertexSPD->IsFromVertexerZ())
  {
    if (vertexSPD->GetDispersion() > 0.02) 
    {
      if (debug)
        Printf("AliPWG0Helper::TestVertex: Delta Phi too large in Vertexer Z: %f (required: %f", vertex->GetDispersion(), 0.02);
      return kFALSE;
    }
  }


  return kTRUE;
}

//____________________________________________________________________
Bool_t AlidNdPtHelper::IsGoodImpPar(const AliESDtrack *const track)
{
//
// check whether particle has good DCAr(Pt) impact
// parameter. Only for TPC+ITS tracks (7*sigma cut)
// Origin: Andrea Dainese
//

Float_t d0z0[2],covd0z0[3];
track->GetImpactParameters(d0z0,covd0z0);
Float_t sigma= 0.0050+0.0060/TMath::Power(track->Pt(),0.9);
Float_t d0max = 7.*sigma;
if(TMath::Abs(d0z0[0]) < d0max) return kTRUE;

return kFALSE;
}

//____________________________________________________________________
Bool_t AlidNdPtHelper::IsPrimaryParticle(AliStack* const stack, Int_t idx, ParticleMode particleMode)
{
//
// check primary particles 
// depending on the particle mode
//
  if(!stack) return kFALSE;

  TParticle* particle = stack->Particle(idx);
  if (!particle) return  kFALSE;

  // only charged particles
  Double_t charge = particle->GetPDG()->Charge()/3.;
  if (TMath::Abs(charge) < 0.001) return kFALSE;

  Int_t pdg = TMath::Abs(particle->GetPdgCode());

  // physical primary
  Bool_t prim = stack->IsPhysicalPrimary(idx);

  if(particleMode==kMCPion) {
    if(prim && pdg==kPiPlus) return kTRUE;
    else return kFALSE;
  } 

  if (particleMode==kMCKaon) {
    if(prim && pdg==kKPlus) return kTRUE;
    else return kFALSE;
  }
    
  if (particleMode==kMCProton) {
    if(prim && pdg==kProton) return kTRUE;
    else return kFALSE;
  }

  if(particleMode==kMCRest) {
    if(prim && pdg!=kPiPlus && pdg!=kKPlus && pdg!=kProton) return kTRUE;
    else return kFALSE;
  }

return prim;
}

//____________________________________________________________________
Bool_t AlidNdPtHelper::IsCosmicTrack(AliESDtrack *const track1, AliESDtrack *const track2)
{
//
// check cosmic tracks
//
  if(!track1) return kFALSE;
  if(!track2) return kFALSE;

  //
  // cosmic tracks in TPC
  //
  //if( TMath::Abs( track1->Theta() - track2->Theta() ) < 0.004  && 
  //  ((TMath::Abs(track1->Phi()-track2->Phi()) - TMath::Pi() )<0.004) && 
  //if( track1->Pt() > 4.0 && (TMath::Abs(track1->Phi()-track2->Phi())-TMath::Pi())<0.1 
  //    && (TMath::Abs(track1->Eta()+track2->Eta())-0.1) < 0.0 && (track1->Charge()+track2->Charge()) == 0)

  //Float_t scaleF= 6.0;
  if ( track1->Pt() > 4 && track2->Pt() > 4 && 
       //(TMath::Abs(track1->GetSnp()-track2->GetSnp())-2.) < scaleF * TMath::Sqrt(track1->GetSigmaSnp2()+track2->GetSigmaSnp2()) &&
       //TMath::Abs(track1->GetTgl()-track2->GetTgl())   < scaleF * TMath::Sqrt(track1->GetSigmaTgl2()+track2->GetSigmaTgl2()) &&
       //TMath::Abs(track1->OneOverPt()-track2->OneOverPt()) < scaleF * TMath::Sqrt(track1->GetSigma1Pt2()+track2->GetSigma1Pt2()) && 
       (track1->Charge()+track2->Charge()) == 0 && 
       track1->Eta()*track2->Eta()<0.0 && TMath::Abs(track1->Eta()+track2->Eta())<0.03 &&
       TMath::Abs(TMath::Abs(track1->Phi()-track2->Phi())-TMath::Pi())<0.1
     )  
  {
    printf("COSMIC  candidate \n");

    printf("track1->Pt() %f, track1->Theta() %f, track1->Eta() %f, track1->Phi() %f, track1->Charge() %d  \n", track1->Pt(), track1->Theta(), track1->Eta(), track1->Phi(), track1->Charge());
    printf("track2->Pt() %f, track2->Theta() %f, track2->Eta() %f, track2->Phi() %f, track2->Charge() %d  \n", track2->Pt(), track2->Theta(), track2->Eta(), track2->Phi(), track2->Charge());
    printf("dtheta %f, deta %f, dphi %f, dq %d  \n", track1->Theta()-track2->Theta(),  track1->Eta()-track2->Eta(), track1->Phi()-track2->Phi(), track1->Charge()+track2->Charge()); 
    printf("dsphi %f, errsphi %f, dtanl %f, errtanl %f  \n", TMath::Abs(track1->GetSnp()-track2->GetSnp()), TMath::Sqrt(track1->GetSigmaSnp2()+track2->GetSigmaSnp2()), TMath::Abs(track1->GetTgl()-track2->GetTgl()), TMath::Sqrt(track1->GetSigmaTgl2()+track2->GetSigmaTgl2())); 
    return kTRUE;
  }
     
return kFALSE; 
}

//____________________________________________________________________
void AlidNdPtHelper::PrintConf(AnalysisMode analysisMode, AliTriggerAnalysis::Trigger trigger)
{
  //
  // Prints the given configuration
  //

  TString str(">>>> Running with ");

  switch (analysisMode)
  {
    case kInvalid: str += "invalid setting"; break;
    case kSPD : str += "SPD-only"; break;
    case kTPC : str += "TPC-only"; break;
    case kTPCITS : str += "Global tracking"; break;
    case kTPCSPDvtx : str += "TPC tracking + SPD event vertex"; break;
    case kTPCSPDvtxUpdate : str += "TPC tracks updated with SPD event vertex point"; break;
    case kTPCTrackSPDvtx : str += "TPC tracking + Tracks event vertex or SPD event vertex"; break;
    case kTPCTrackSPDvtxUpdate : str += "TPC tracks updated with Track or SPD event vertex point"; break;
    case kTPCITSHybrid : str += "TPC tracking + ITS refit + >1 SPD cluster"; break;
    case kTPCITSHybridTrackSPDvtx : str += "TPC tracking + ITS refit + >1 SPD cluster + Tracks event vertex or SPD event vertex"; break;
    case kTPCITSHybridTrackSPDvtxDCArPt : str += "TPC tracking + ITS refit + >1 SPD cluster + Tracks event vertex or SPD event vertex + DCAr(pt)"; break;
    case kITSStandAloneTrackSPDvtx : str += "ITS standalone + Tracks event vertex or SPD event vertex + DCAr(pt)"; break;
    case kITSStandAloneTPCTrackSPDvtx : str += "kITSStandAloneTPCTrackSPDvtx + TPC stand alone track  + Tracks event vertex or SPD event vertex + DCAr(pt)"; break;
    case kMCRec : str += "TPC tracking + Replace rec. with MC values"; break;
  }
  str += " and trigger ";

  str += AliTriggerAnalysis::GetTriggerName(trigger);

  str += " <<<<";

  Printf("%s", str.Data());
}

//____________________________________________________________________
Int_t AlidNdPtHelper::ConvertPdgToPid(const TParticle *const particle) {
//
// Convert Abs(pdg) to pid 
// (0 - e, 1 - muons, 2 - pions, 3 - kaons, 4 - protons, 5 -all rest)
//
Int_t pid=-1;

  if (TMath::Abs(particle->GetPdgCode()) == kElectron)         { pid = 0; }
  else if (TMath::Abs(particle->GetPdgCode()) == kMuonMinus) { pid = 1; }
  else if (TMath::Abs(particle->GetPdgCode()) == kPiPlus)    { pid = 2; }
  else if (TMath::Abs(particle->GetPdgCode()) == kKPlus)     { pid = 3; }
  else if (TMath::Abs(particle->GetPdgCode()) == kProton)    { pid = 4; }
  else                                                       { pid = 5; }

return pid;
}

//_____________________________________________________________________________
TH1F* AlidNdPtHelper::CreateResHisto(TH2F* const hRes2, TH1F **phMean, Int_t integ,  Bool_t drawBinFits, Int_t minHistEntries)
{
//
// Create mean and resolution 
// histograms
//
  TVirtualPad* currentPad = gPad;
  TAxis* axis = hRes2->GetXaxis();
  Int_t nBins = axis->GetNbins();
  //Bool_t overflowBinFits = kFALSE;
  TH1F* hRes, *hMean;
  if (axis->GetXbins()->GetSize()){
    hRes = new TH1F("hRes", "", nBins, axis->GetXbins()->GetArray());
    hMean = new TH1F("hMean", "", nBins, axis->GetXbins()->GetArray());
  }
  else{
    hRes = new TH1F("hRes", "", nBins, axis->GetXmin(), axis->GetXmax());
    hMean = new TH1F("hMean", "", nBins, axis->GetXmin(), axis->GetXmax());

  }
  hRes->SetStats(false);
  hRes->SetOption("E");
  hRes->SetMinimum(0.);
  //
  hMean->SetStats(false);
  hMean->SetOption("E");
 
  // create the fit function
  TF1 * fitFunc = new TF1("G","[0]*exp(-(x-[1])*(x-[1])/(2.*[2]*[2]))",-3,3);
  
  fitFunc->SetLineWidth(2);
  fitFunc->SetFillStyle(0);
  // create canvas for fits
  TCanvas* canBinFits = NULL;
  //Int_t nPads = (overflowBinFits) ? nBins+2 : nBins;
  Int_t nPads = nBins;
  Int_t nx = Int_t(sqrt(nPads-1.));// + 1;
  Int_t ny = (nPads-1) / nx + 1;
  if (drawBinFits) {
    canBinFits = (TCanvas*)gROOT->FindObject("canBinFits");
    if (canBinFits) delete canBinFits;
    canBinFits = new TCanvas("canBinFits", "fits of bins", 200, 100, 500, 700);
    canBinFits->Divide(nx, ny);
  }

  // loop over x bins and fit projection
  //Int_t dBin = ((overflowBinFits) ? 1 : 0);
  Int_t dBin = 0;
  for (Int_t bin = 1-dBin; bin <= nBins+dBin; bin++) {
    if (drawBinFits) canBinFits->cd(bin + dBin);
    Int_t bin0=TMath::Max(bin-integ,0);
    Int_t bin1=TMath::Min(bin+integ,nBins);
    TH1D* hBin = hRes2->ProjectionY("hBin", bin0, bin1);
    //    
    if (hBin->GetEntries() > minHistEntries) {
      fitFunc->SetParameters(hBin->GetMaximum(),hBin->GetMean(),hBin->GetRMS());
      hBin->Fit(fitFunc,"s");
      Double_t sigma = TMath::Abs(fitFunc->GetParameter(2));

      if (sigma > 0.){
	hRes->SetBinContent(bin, TMath::Abs(fitFunc->GetParameter(2)));
	hMean->SetBinContent(bin, fitFunc->GetParameter(1));	
      }
      else{
	hRes->SetBinContent(bin, 0.);
	hMean->SetBinContent(bin,0);
      }
      hRes->SetBinError(bin, fitFunc->GetParError(2));
      hMean->SetBinError(bin, fitFunc->GetParError(1));
      
      //
      //

    } else {
      hRes->SetBinContent(bin, 0.);
      hRes->SetBinError(bin, 0.);
      hMean->SetBinContent(bin, 0.);
      hMean->SetBinError(bin, 0.);
    }
    

    if (drawBinFits) {
      char name[256];
      if (bin == 0) {
	snprintf(name,256, "%s < %.4g", axis->GetTitle(), axis->GetBinUpEdge(bin));
      } else if (bin == nBins+1) {
	snprintf(name,256, "%.4g < %s", axis->GetBinLowEdge(bin), axis->GetTitle());
      } else {
	snprintf(name,256, "%.4g < %s < %.4g", axis->GetBinLowEdge(bin),
		axis->GetTitle(), axis->GetBinUpEdge(bin));
      }
      canBinFits->cd(bin + dBin);
      hBin->SetTitle(name);
      hBin->SetStats(kTRUE);
      hBin->DrawCopy("E");
      canBinFits->Update();
      canBinFits->Modified();
      canBinFits->Update();
    }
    
    delete hBin;
  }

  delete fitFunc;
  currentPad->cd();
  *phMean = hMean;
  return hRes;
}

//_____________________________________________________________________________
TH1F* AlidNdPtHelper::MakeResol(TH2F * his, Int_t integ, Bool_t type, Bool_t drawBins, Int_t minHistEntries){
// Create resolution histograms
  
     TH1F *hisr=0, *hism=0;
     if (!gPad) new TCanvas;
         hisr = CreateResHisto(his,&hism,integ,drawBins,minHistEntries);
         if (type) return hism;
         else return hisr;

return hisr;	 
}

//_____________________________________________________________________________
TObjArray* AlidNdPtHelper::GetAllChargedTracks(AliESDEvent *esdEvent, AnalysisMode analysisMode)
{
  //
  // all charged TPC particles 
  //
  TObjArray *allTracks = new TObjArray();
  if(!allTracks) return allTracks;

  AliESDtrack *track=0;
  for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) 
  { 
    if(analysisMode == AlidNdPtHelper::kTPC) { 
      //
      // track must be deleted by user 
      // esd track parameters are replaced by TPCinner
      //
      track = AliESDtrackCuts::GetTPCOnlyTrack(esdEvent,iTrack);
      if(!track) continue;
    } 
    else if (analysisMode == AlidNdPtHelper::kTPCSPDvtx || analysisMode == AlidNdPtHelper::kTPCSPDvtxUpdate)
    {
      //
      // track must be deleted by the user 
      // esd track parameters are replaced by TPCinner
      //
      track = AlidNdPtHelper::GetTPCOnlyTrackSPDvtx(esdEvent,iTrack,kFALSE);
      if(!track) continue;
    }
    else if (analysisMode == AlidNdPtHelper::kTPCTrackSPDvtx || analysisMode == AlidNdPtHelper::kTPCTrackSPDvtxUpdate)
    {
      //
      // track must be deleted by the user 
      // esd track parameters are replaced by TPCinner
      //
      track = AlidNdPtHelper::GetTPCOnlyTrackTrackSPDvtx(esdEvent,iTrack,kFALSE);
      if(!track) continue;
    }
    else if(analysisMode == AlidNdPtHelper::kTPCITSHybrid )
    {
      track = AlidNdPtHelper::GetTrackSPDvtx(esdEvent,iTrack,kFALSE);
    }
    else if(analysisMode == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || analysisMode == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt || analysisMode == AlidNdPtHelper::kITSStandAloneTrackSPDvtx || analysisMode ==AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx)
    {
      track = AlidNdPtHelper::GetTrackTrackSPDvtx(esdEvent,iTrack,kFALSE);
    }
    else 
    {
      track = esdEvent->GetTrack(iTrack);
    }

    if(!track) continue;

    if(track->Charge()==0) { 
      if(analysisMode == AlidNdPtHelper::kTPC || 
         analysisMode == AlidNdPtHelper::kTPCSPDvtx || analysisMode == AlidNdPtHelper::kTPCTrackSPDvtx  ||
         analysisMode == AlidNdPtHelper::kTPCSPDvtxUpdate || analysisMode == AlidNdPtHelper::kTPCTrackSPDvtxUpdate) 
      {
        delete track; continue; 
      } else {
        continue;
      } 
    }

    allTracks->Add(track);
  }

  if(analysisMode == AlidNdPtHelper::kTPC || 
     analysisMode == AlidNdPtHelper::kTPCSPDvtx || analysisMode == AlidNdPtHelper::kTPCTrackSPDvtx || 
     analysisMode == AlidNdPtHelper::kTPCSPDvtxUpdate || analysisMode == AlidNdPtHelper::kTPCTrackSPDvtxUpdate) {
     
     allTracks->SetOwner(kTRUE);
  }

return allTracks;
}

//_____________________________________________________________________________
AliESDtrack *AlidNdPtHelper::GetTPCOnlyTrackSPDvtx(const AliESDEvent* esdEvent, Int_t iTrack, Bool_t bUpdate)
{
//
// Create ESD tracks from TPCinner parameters.
// Propagte to DCA to SPD vertex.
// Update using SPD vertex point (parameter)
//
// It is user responsibility to delete these tracks
//

  if (!esdEvent) return NULL;
  if (!esdEvent->GetPrimaryVertexSPD() ) { return NULL; }
  if (!esdEvent->GetPrimaryVertexSPD()->GetStatus() ) { return  NULL; }
   
  // 
  AliESDtrack* track = esdEvent->GetTrack(iTrack);
  if (!track)
    return NULL;

  Bool_t isOK = kFALSE;
  Double_t x[3]; track->GetXYZ(x);
  Double_t b[3]; AliTracker::GetBxByBz(x,b);

  // create new ESD track
  AliESDtrack *tpcTrack = new AliESDtrack();
 
  // relate TPC-only tracks (TPCinner) to SPD vertex
  AliExternalTrackParam cParam;
  if(bUpdate) {  
    isOK = track->RelateToVertexTPCBxByBz(esdEvent->GetPrimaryVertexSPD(),b,kVeryBig,&cParam);
    track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());

    // reject fake tracks
    if(track->Pt() > 10000.)  {
      ::Error("Exclude no physical tracks","pt>10000. GeV");
      delete tpcTrack; 
      return NULL;
    }
  }
  else {
    isOK = track->RelateToVertexTPCBxByBz(esdEvent->GetPrimaryVertexSPD(), b, kVeryBig);
  }

  // only true if we have a tpc track
  if (!track->FillTPCOnlyTrack(*tpcTrack))
  {
    delete tpcTrack;
    return NULL;
  }
  
  if(!isOK) return NULL;

return tpcTrack;
} 

//_____________________________________________________________________________
AliESDtrack *AlidNdPtHelper::GetTPCOnlyTrackTrackSPDvtx(const AliESDEvent* esdEvent, Int_t iTrack, Bool_t bUpdate)
{
//
// Create ESD tracks from TPCinner parameters.
// Propagte to DCA to Track or SPD vertex.
// Update using SPD vertex point (parameter)
//
// It is user responsibility to delete these tracks
//
  if (!esdEvent) return NULL;
  const AliESDVertex *vertex = esdEvent->GetPrimaryVertexTracks();
  if(vertex->GetNContributors()<1) {
    // SPD vertex
    vertex = esdEvent->GetPrimaryVertexSPD();
  }
  if(!vertex) return NULL;
 
  // 
  AliESDtrack* track = esdEvent->GetTrack(iTrack);
  if (!track)
    return NULL;

  Bool_t isOK = kFALSE;
  Double_t x[3]; track->GetXYZ(x);
  Double_t b[3]; AliTracker::GetBxByBz(x,b);

  // create new ESD track
  AliESDtrack *tpcTrack = new AliESDtrack();
 
  // relate TPC-only tracks (TPCinner) to SPD vertex
  AliExternalTrackParam cParam;
  if(bUpdate) {  
    isOK = track->RelateToVertexTPCBxByBz(vertex,b,kVeryBig,&cParam);
    track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());

    // reject fake tracks
    if(track->Pt() > 10000.)  {
      ::Error("Exclude no physical tracks","pt>10000. GeV");
      delete tpcTrack; 
      return NULL;
    }
  }
  else {
    isOK = track->RelateToVertexTPCBxByBz(vertex, b, kVeryBig);
  }

  // only true if we have a tpc track
  if (!track->FillTPCOnlyTrack(*tpcTrack))
  {
    delete tpcTrack;
    return NULL;
  }
  
  if(!isOK) return NULL;

return tpcTrack;
} 

//_____________________________________________________________________________
AliESDtrack *AlidNdPtHelper::GetTrackSPDvtx(const AliESDEvent* esdEvent, Int_t iTrack, Bool_t bUpdate)
{
//
// Propagte track to DCA to SPD vertex.
// Update using SPD vertex point (parameter)
//
  if (!esdEvent) return NULL;
  if (!esdEvent->GetPrimaryVertexSPD() ) { return NULL; }
  if (!esdEvent->GetPrimaryVertexSPD()->GetStatus() ) { return  NULL; }
   
  // 
  AliESDtrack* track = esdEvent->GetTrack(iTrack);
  if (!track)
    return NULL;

  Bool_t isOK = kFALSE;
  Double_t x[3]; track->GetXYZ(x);
  Double_t b[3]; AliTracker::GetBxByBz(x,b);

  // relate tracks to SPD vertex
  AliExternalTrackParam cParam;
  if(bUpdate) {  
    isOK = track->RelateToVertexBxByBz(esdEvent->GetPrimaryVertexSPD(),b,kVeryBig,&cParam);
    track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());

    // reject fake tracks
    if(track->Pt() > 10000.)  {
      ::Error("Exclude no physical tracks","pt>10000. GeV");
      return NULL;
    }
  }
  else {
    isOK = track->RelateToVertexBxByBz(esdEvent->GetPrimaryVertexSPD(), b, kVeryBig);
  }
 
  if(!isOK) return NULL;

return track;
} 

//_____________________________________________________________________________
AliESDtrack *AlidNdPtHelper::GetTrackTrackSPDvtx(const AliESDEvent* esdEvent, Int_t iTrack, Bool_t bUpdate)
{
//
// Propagte track to DCA to Track or SPD vertex.
// Update using SPD vertex point (parameter)
//
  if (!esdEvent) return NULL;

  const AliESDVertex *vertex = esdEvent->GetPrimaryVertexTracks();
  if(vertex->GetNContributors()<1) {
    // SPD vertex
    vertex = esdEvent->GetPrimaryVertexSPD();
  }
  if(!vertex) return NULL;

  // 
  AliESDtrack* track = esdEvent->GetTrack(iTrack);
  if (!track)
    return NULL;

  Bool_t isOK = kFALSE;
  Double_t x[3]; track->GetXYZ(x);
  Double_t b[3]; AliTracker::GetBxByBz(x,b);

  // relate tracks to SPD vertex
  AliExternalTrackParam cParam;
  if(bUpdate) {  
    isOK = track->RelateToVertexBxByBz(vertex,b,kVeryBig,&cParam);
    track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());

    // reject fake tracks
    if(track->Pt() > 10000.)  {
      ::Error("Exclude no physical tracks","pt>10000. GeV");
      return NULL;
    }
  }
  else {
    isOK = track->RelateToVertexBxByBz(vertex, b, kVeryBig);
  }
 
  if(!isOK) return NULL;

return track;
} 

//_____________________________________________________________________________
Bool_t AlidNdPtHelper::SelectEvent(const AliESDEvent* const esdEvent, AliESDtrackCuts* const esdTrackCuts) {
// select events with at least
// one reconstructed primary track in acceptance
// pT>0.5 GeV/c, |eta|<0.8 for cross section studies

if(!esdEvent) return kFALSE;
if(!esdTrackCuts) return kFALSE;

  AliESDtrack *track=0;
  Int_t count = 0;
  for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) 
  { 
    track = esdEvent->GetTrack(iTrack);
    if(!track) continue;
    if(track->Charge()==0) continue;
    if(!esdTrackCuts->AcceptTrack(track)) continue;
    if(track->Pt() < 0.5) continue;
    if(TMath::Abs(track->Eta()) > 0.8) continue;

    count++;
  }

  if(count > 0) return kTRUE;
  else return kFALSE;

return kFALSE;
}

//_____________________________________________________________________________
Bool_t AlidNdPtHelper::SelectMCEvent(AliMCEvent* const mcEvent) {
//
// select events with at least
// one prompt (MC primary) track in acceptance
// pT>0.5 GeV/c, |eta|<0.8 for cross section studies
//

if(!mcEvent) return kFALSE;
AliStack* stack = mcEvent->Stack(); 
if(!stack) return kFALSE;

  Int_t count = 0;
  for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) 
  {
    TParticle* particle = stack->Particle(iMc);
    if (!particle) continue;

    // only charged particles
    if(!particle->GetPDG()) continue;
    Double_t charge = particle->GetPDG()->Charge()/3.;
    if(charge == 0) continue;

    // physical primary
    Bool_t prim = stack->IsPhysicalPrimary(iMc);
    if(!prim) continue;

    if(particle->Pt() < 0.5) continue;
    if(TMath::Abs(particle->Eta()) > 0.8) continue;

    count++;
  }

  if(count > 0) return kTRUE;
  else return kFALSE;

return kFALSE;
}

//_____________________________________________________________________________
Int_t AlidNdPtHelper::GetTPCMBTrackMult(const AliESDEvent *const esdEvent,const AlidNdPtEventCuts *const evtCuts, const AlidNdPtAcceptanceCuts *const accCuts,const  AliESDtrackCuts *const trackCuts)
{
  //
  // get MB event track multiplicity
  //
  if(!esdEvent) 
  { 
    ::Error("AlidNdPtHelper::GetTPCMBTrackMult()","esd event is NULL");
    return 0;  
  }
 
  if(!evtCuts || !accCuts || !trackCuts) 
  { 
    ::Error("AlidNdPtHelper::GetTPCMBTrackMult()","cuts not available");
    return 0;  
  }

  //
  Double_t pos[3]={evtCuts->GetMeanXv(),evtCuts->GetMeanYv(),evtCuts->GetMeanZv()};
  Double_t err[3]={evtCuts->GetSigmaMeanXv(),evtCuts->GetSigmaMeanYv(),evtCuts->GetSigmaMeanZv()};
  AliESDVertex vtx0(pos,err);

  //
  Float_t maxDCAr = accCuts->GetMaxDCAr();
  Float_t maxDCAz = accCuts->GetMaxDCAz();
  Float_t minTPCClust = trackCuts->GetMinNClusterTPC();
  //
  Int_t ntracks = esdEvent->GetNumberOfTracks();
  Double_t dca[2],cov[3];
  Int_t mult=0;
  for (Int_t i=0;i <ntracks; i++){
    AliESDtrack *t = esdEvent->GetTrack(i);
    if (!t) continue;
    if (t->Charge() == 0) continue;
    if (!t->GetTPCInnerParam()) continue;
    if (t->GetTPCNcls()<minTPCClust) continue;
    //
    Double_t x[3]; t->GetXYZ(x);
    Double_t b[3]; AliTracker::GetBxByBz(x,b);
    const Double_t kMaxStep = 1;   //max step over the material

    AliExternalTrackParam  *tpcTrack  = new AliExternalTrackParam(*(t->GetTPCInnerParam()));
    if(!tpcTrack) return 0;

    if (!tpcTrack->PropagateToDCABxByBz(&vtx0,b,kMaxStep,dca,cov)) 
    {
      if(tpcTrack) delete tpcTrack; 
      continue;
    }
    //
    if (TMath::Abs(dca[0])>maxDCAr || TMath::Abs(dca[1])>maxDCAz) {
      if(tpcTrack) delete tpcTrack; 
      continue;
    }

    mult++;    

    if(tpcTrack) delete tpcTrack; 
  }

return mult;  
}

//_____________________________________________________________________________
Int_t AlidNdPtHelper::GetTPCMBPrimTrackMult(const AliESDEvent *const esdEvent, AliStack *const  stack, const AlidNdPtEventCuts *const evtCuts, const AlidNdPtAcceptanceCuts *const accCuts, const AliESDtrackCuts *const trackCuts)
{
  //
  // get MB primary event track multiplicity
  //
  if(!esdEvent) 
  { 
    ::Error("AlidNdPtHelper::GetTPCMBPrimTrackMult()","esd event is NULL");
    return 0;  
  }

  if(!stack) 
  { 
    ::Error("AlidNdPtHelper::GetTPCMBPrimTrackMult()","esd event is NULL");
    return 0;  
  }
 
  if(!evtCuts || !accCuts || !trackCuts) 
  { 
    ::Error("AlidNdPtHelper::GetTPCMBPrimTrackMult()","cuts not available");
    return 0;  
  }

  //
  Double_t pos[3]={evtCuts->GetMeanXv(),evtCuts->GetMeanYv(),evtCuts->GetMeanZv()};
  Double_t err[3]={evtCuts->GetSigmaMeanXv(),evtCuts->GetSigmaMeanYv(),evtCuts->GetSigmaMeanZv()};
  AliESDVertex vtx0(pos,err);

  //
  Float_t maxDCAr = accCuts->GetMaxDCAr();
  Float_t maxDCAz = accCuts->GetMaxDCAz();
  Float_t minTPCClust = trackCuts->GetMinNClusterTPC();

  //
  Int_t ntracks = esdEvent->GetNumberOfTracks();
  Double_t dca[2],cov[3];
  Int_t mult=0;
  for (Int_t i=0;i <ntracks; i++){
    AliESDtrack *t = esdEvent->GetTrack(i);
    if (!t) continue;
    if (t->Charge() == 0) continue;
    if (!t->GetTPCInnerParam()) continue;
    if (t->GetTPCNcls()<minTPCClust) continue;
    //
    Double_t x[3]; t->GetXYZ(x);
    Double_t b[3]; AliTracker::GetBxByBz(x,b);
    const Double_t kMaxStep = 1;   //max step over the material

    AliExternalTrackParam  *tpcTrack  = new AliExternalTrackParam(*(t->GetTPCInnerParam()));
    if(!tpcTrack) return 0;

    if (!tpcTrack->PropagateToDCABxByBz(&vtx0,b,kMaxStep,dca,cov)) 
    {
      if(tpcTrack) delete tpcTrack; 
      continue;
    }
    //
    if (TMath::Abs(dca[0])>maxDCAr || TMath::Abs(dca[1])>maxDCAz) {
      if(tpcTrack) delete tpcTrack; 
      continue;
    }

    Int_t label = TMath::Abs(t->GetLabel());
    TParticle *part = stack->Particle(label);
    if(!part) { 
      if(tpcTrack) delete tpcTrack; 
      continue;
    }
    if(!stack->IsPhysicalPrimary(label)) 
    { 
      if(tpcTrack) delete tpcTrack; 
      continue;
    }

    mult++;    

    if(tpcTrack) delete tpcTrack; 
  }

return mult;  
}


//_____________________________________________________________________________
Double_t AlidNdPtHelper::GetStrangenessCorrFactor(const Double_t pt)
{
// data driven correction factor for secondaries
// underestimated secondaries with strangeness in Pythia (A. Dainese)

//
// pt=0.17; fact=1
// pt=0.4; fact=1.07
// pt=0.6; fact=1.25
// pt>=1.2; fact=1.5
//

if (pt <= 0.17) return 1.0;
if (pt <= 0.4) return GetLinearInterpolationValue(0.17,1.0,0.4,1.07, pt);
if (pt <= 0.6) return GetLinearInterpolationValue(0.4,1.07,0.6,1.25, pt);
if (pt <= 1.2) return GetLinearInterpolationValue(0.6,1.25,1.2,1.5,  pt);
return 1.5;

}

//_____________________________________________________________________________
Double_t AlidNdPtHelper::GetStrangenessCorrFactorPbPb(const Double_t pt)
{
// data driven correction factor for secondaries (PbPb)

if (pt <= 0.25) return 1.0;
if (pt <= 0.5) return GetLinearInterpolationValue(0.25,1.0,0.5,1.4, pt);
if (pt <= 1.0) return GetLinearInterpolationValue(0.5,1.4,1.0,1.47, pt);
if (pt <= 2.0) return GetLinearInterpolationValue(1.0,1.47,2.0,1.56,  pt);
if (pt <= 5.0) return GetLinearInterpolationValue(2.0,1.56,5.0,1.67,  pt);
return 1.67;

}

//___________________________________________________________________________
Double_t AlidNdPtHelper::GetLinearInterpolationValue(const Double_t x1,const  Double_t y1,const  Double_t x2,const  Double_t y2, const Double_t pt)
{
//
// linear interpolation
//
  return ((y2-y1)/(x2-x1))*pt+(y2-(((y2-y1)/(x2-x1))*x2)); 
}

//_____________________________________________________________________________
Int_t AlidNdPtHelper::GetMCTrueTrackMult(AliMCEvent *const mcEvent, AlidNdPtEventCuts *const evtCuts, AlidNdPtAcceptanceCuts *const accCuts)
{
  //
  // calculate mc event true track multiplicity
  //
  if(!mcEvent) return 0;

  AliStack* stack = 0;
  Int_t mult = 0;

  // MC particle stack
  stack = mcEvent->Stack();
  if (!stack) return 0;

  //
  //printf("minZv %f, maxZv %f \n", evtCuts->GetMinZv(), evtCuts->GetMaxZv());
  //

  Bool_t isEventOK = evtCuts->AcceptMCEvent(mcEvent);
  if(!isEventOK) return 0; 

  Int_t nPart  = stack->GetNtrack();
  for (Int_t iMc = 0; iMc < nPart; ++iMc) 
  {
     TParticle* particle = stack->Particle(iMc);
     if (!particle)
     continue;

     // only charged particles
     if(!particle->GetPDG()) continue;
     Double_t charge = particle->GetPDG()->Charge()/3.;
     if (TMath::Abs(charge) < 0.001)
     continue;
      
     // physical primary
     Bool_t prim = stack->IsPhysicalPrimary(iMc);
     if(!prim) continue;

     // checked accepted including pt cut
     //if(accCuts->AcceptTrack(particle)) 
     if( particle->Eta() > accCuts->GetMinEta() && particle->Eta() < accCuts->GetMaxEta() && particle->Pt() > accCuts->GetMinPt() && particle->Pt() < accCuts->GetMaxPt() ) 
	 
     {
       mult++;
     }
  }

return mult;  
}

//_____________________________________________________________________________
Int_t AlidNdPtHelper::GetMCTrueTrackMult(AliMCEvent *const mcEvent, AlidNdPtEventCuts *const evtCuts, AlidNdPtAcceptanceCuts *const accCuts, Double_t yShift)
{
  //
  // calculate mc event true track multiplicity
  //
  if(!mcEvent) return 0;

  AliStack* stack = 0;
  Int_t mult = 0;

  // MC particle stack
  stack = mcEvent->Stack();
  if (!stack) return 0;

  //
  //printf("minZv %f, maxZv %f \n", evtCuts->GetMinZv(), evtCuts->GetMaxZv());
  //

  Bool_t isEventOK = evtCuts->AcceptMCEvent(mcEvent);
  if(!isEventOK) return 0; 

  Int_t nPart  = stack->GetNtrack();
  for (Int_t iMc = 0; iMc < nPart; ++iMc) 
  {
     TParticle* particle = stack->Particle(iMc);
     if (!particle)
     continue;

     // only charged particles
     if(!particle->GetPDG()) continue;
     Double_t charge = particle->GetPDG()->Charge()/3.;
     if (TMath::Abs(charge) < 0.001)
     continue;
      
     // physical primary
     Bool_t prim = stack->IsPhysicalPrimary(iMc);
     if(!prim) continue;

     // checked accepted without pt cut
     //if(accCuts->AcceptTrack(particle)) 
     if (TMath::Abs(particle->Eta()) > 100.) continue;
  
     Double_t etacms = TMath::ASinH((TMath::CosH(yShift)*TMath::SinH(particle->Eta())) - (TMath::SinH(yShift)*particle->Energy()/particle->Pt()));
     Double_t minetacms = accCuts->GetMinEta()-yShift;
     Double_t maxetacms = accCuts->GetMaxEta()-yShift;

     // checked accepted including pt cut
     //if(accCuts->AcceptTrack(particle)) 
     if( etacms > minetacms && etacms < maxetacms && particle->Pt() > accCuts->GetMinPt() && particle->Pt() < accCuts->GetMaxPt() )
     {
       mult++;
     }
  }

return mult;  
}

//_______________________________________________________________________
void  AlidNdPtHelper::PrintMCInfo(AliStack *const pStack,Int_t label)
{
// print information about particles in the stack

  if(!pStack)return;
  label = TMath::Abs(label);
  TParticle *part = pStack->Particle(label);
  Printf("########################");
  Printf("%s:%d %d UniqueID %d PDG %d P %3.3f",(char*)__FILE__,__LINE__,label,part->GetUniqueID(),part->GetPdgCode(),part->P());
  part->Print();
  TParticle* mother = part;
  Int_t imo = part->GetFirstMother();
  Int_t nprim = pStack->GetNprimary();

  while((imo >= nprim)) {
      mother =  pStack->Particle(imo);
      Printf("Mother %s:%d Label %d UniqueID %d PDG %d P %3.3f",(char*)__FILE__,__LINE__,imo,mother->GetUniqueID(),mother->GetPdgCode(),mother->P());
      mother->Print();
      imo =  mother->GetFirstMother();
 }

 Printf("########################");
}


//_____________________________________________________________________________
TH1* AlidNdPtHelper::GetContCorrHisto(TH1 *const hist) 
{
//
// get contamination histogram
//
 if(!hist) return 0;

 Int_t nbins = hist->GetNbinsX();
 TH1 *hCont = (TH1D *)hist->Clone();

 for(Int_t i=0; i<=nbins+1; i++) {
   Double_t binContent = hist->GetBinContent(i);
   Double_t binError = hist->GetBinError(i);

   hCont->SetBinContent(i,1.-binContent);
   hCont->SetBinError(i,binError);
 }

return hCont;
}


//_____________________________________________________________________________
TH1* AlidNdPtHelper::ScaleByBinWidth(TH1 *const hist) 
{
//
// scale by bin width
//
 if(!hist) return 0;

 TH1 *hScale = (TH1D *)hist->Clone();
 hScale->Scale(1.,"width");

return hScale;
}

//_____________________________________________________________________________
TH1* AlidNdPtHelper::CalcRelativeDifference(const TH1 *const hist1, const TH1 *const hist2) 
{
//
// calculate rel. difference 
//

 if(!hist1) return 0;
 if(!hist2) return 0;

 TH1 *h1Clone = (TH1D *)hist1->Clone();
 h1Clone->Sumw2();

 // (rec-mc)/mc
 h1Clone->Add(hist2,-1);
 h1Clone->Divide(hist2);

return h1Clone;
}

//_____________________________________________________________________________
TH1* AlidNdPtHelper::CalcRelativeDifferenceFun(const TH1 *const hist1, TF1 *const fun) 
{
//
// calculate rel. difference
// between histogram and function
//
 if(!hist1) return 0;
 if(!fun) return 0;

 TH1 *h1Clone = (TH1D *)hist1->Clone();
 h1Clone->Sumw2();

 // 
 h1Clone->Add(fun,-1);
 h1Clone->Divide(hist1);

return h1Clone;
}

//_____________________________________________________________________________
TH1* AlidNdPtHelper::NormalizeToEvent(const TH2 *const hist1, const TH1 *const hist2) 
{
// normalise to event for a given multiplicity bin
// return pt histogram 

 if(!hist1) return 0;
 if(!hist2) return 0;
 char name[256];

 Int_t nbinsX = hist1->GetNbinsX();
 //Int_t nbinsY = hist1->GetNbinsY();

 TH1D *histNorm = 0;
 for(Int_t i=0; i<=nbinsX+1; i++) {
   snprintf(name,256,"mom_%d",i);
   TH1D *hist = (TH1D*)hist1->ProjectionY(name,i+1,i+1);

   snprintf(name,256,"mom_norm");
   if(i==0) { 
     histNorm = (TH1D *)hist->Clone(name);
     histNorm->Reset();
   }

   Double_t nbEvents = hist2->GetBinContent(i);
   if(!nbEvents) { nbEvents = 1.; };

   hist->Scale(1./nbEvents);
   histNorm->Add(hist);
 }

return histNorm;
}

//_____________________________________________________________________________
//THnSparse* AlidNdPtHelper::GenerateCorrMatrix(THnSparse *const hist1, const THnSparse *const hist2, char *const name) {
THnSparse* AlidNdPtHelper::GenerateCorrMatrix(THnSparse *const hist1, const THnSparse *const hist2, const char *name) {
// generate correction matrix
if(!hist1 || !hist2) return 0; 

THnSparse *h =(THnSparse*)hist1->Clone(name);
h->Divide(hist1,hist2,1,1,"B");

return h;
}

//_____________________________________________________________________________
//TH2* AlidNdPtHelper::GenerateCorrMatrix(TH2 *const hist1, TH2 *const hist2, char *const name) {
TH2* AlidNdPtHelper::GenerateCorrMatrix(TH2 *const hist1, TH2 *const hist2, const char *name) {
// generate correction matrix
if(!hist1 || !hist2) return 0; 

TH2D *h =(TH2D*)hist1->Clone(name);;
h->Divide(hist1,hist2,1,1,"B");

return h;
}

//_____________________________________________________________________________
//TH1* AlidNdPtHelper::GenerateCorrMatrix(TH1 *const hist1, TH1 *const hist2, char *const name) {
TH1* AlidNdPtHelper::GenerateCorrMatrix(TH1 *const hist1, TH1 *const hist2, const char* name) {
// generate correction matrix
if(!hist1 || !hist2) return 0; 

TH1D *h =(TH1D*)hist1->Clone(name);;
h->Divide(hist1,hist2,1,1,"B");

return h;
}

//_____________________________________________________________________________
//THnSparse* AlidNdPtHelper::GenerateContCorrMatrix(THnSparse *const hist1, THnSparse *const hist2, char *const name) {
THnSparse* AlidNdPtHelper::GenerateContCorrMatrix(THnSparse *const hist1, const THnSparse *const hist2, const char* name) {
// generate contamination correction matrix
if(!hist1 || !hist2) return 0; 

THnSparse *hist =  GenerateCorrMatrix(hist1, hist2, name);
if(!hist) return 0;

// only for non ZERO bins!!!!

Int_t* coord = new Int_t[hist->GetNdimensions()];
memset(coord, 0, sizeof(Int_t) * hist->GetNdimensions());

  for (Long64_t i = 0; i < hist->GetNbins(); ++i) {
    Double_t v = hist->GetBinContent(i, coord);
    hist->SetBinContent(coord, 1.0-v);
    //printf("v %f, hist->GetBinContent(i, coord) %f \n",v,hist->GetBinContent(i, coord));
    Double_t err = hist->GetBinError(coord);
    hist->SetBinError(coord, err);
  }

delete [] coord;

return hist;
}

//_____________________________________________________________________________
//TH2* AlidNdPtHelper::GenerateContCorrMatrix(TH2 *const hist1, TH2 *const hist2, char *const name) {
TH2* AlidNdPtHelper::GenerateContCorrMatrix(TH2 *const hist1, TH2 *const hist2, const char* name) {
// generate contamination correction matrix
if(!hist1 || !hist2) return 0; 

TH2 *hist = GenerateCorrMatrix(hist1, hist2, name);
if(!hist) return 0;

Int_t nBinsX = hist->GetNbinsX();
Int_t nBinsY = hist->GetNbinsY();

  for (Int_t i = 0; i < nBinsX+1; i++) {
  for (Int_t j = 0; j < nBinsY+1; j++) {
     Double_t cont = hist->GetBinContent(i,j);
     hist->SetBinContent(i,j,1.-cont);
     Double_t err = hist->GetBinError(i,j);
     hist->SetBinError(i,j,err);
  }
  }

return hist;
}

//_____________________________________________________________________________
//TH1* AlidNdPtHelper::GenerateContCorrMatrix(TH1 *const hist1, TH1 *const hist2, char *const name) {
TH1* AlidNdPtHelper::GenerateContCorrMatrix(TH1 *const hist1, TH1 *const hist2, const char* name) {
// generate contamination correction matrix
if(!hist1 || !hist2) return 0; 

TH1 *hist = GenerateCorrMatrix(hist1, hist2, name);
if(!hist) return 0;

Int_t nBinsX = hist->GetNbinsX();

  for (Int_t i = 0; i < nBinsX+1; i++) {
     Double_t cont = hist->GetBinContent(i);
     hist->SetBinContent(i,1.-cont);
     Double_t err = hist->GetBinError(i);
     hist->SetBinError(i,err);
  }

return hist;
}

//_____________________________________________________________________________
const AliESDVertex* AlidNdPtHelper::GetTPCVertexZ(const AliESDEvent* const esdEvent, const AlidNdPtEventCuts *const evtCuts, const AlidNdPtAcceptanceCuts *const accCuts, const AliESDtrackCuts *const trackCuts, Float_t fraction, Int_t ntracksMin){
  //
  // TPC Z vertexer
  //
  if(!esdEvent)
  { 
    ::Error("AlidNdPtHelper::GetTPCVertexZ()","cuts not available");
    return NULL;  
  }

  if(!evtCuts || !accCuts || !trackCuts) 
  { 
    ::Error("AlidNdPtHelper::GetTPCVertexZ()","cuts not available");
    return NULL;  
  }

  Double_t vtxpos[3]={evtCuts->GetMeanXv(),evtCuts->GetMeanYv(),evtCuts->GetMeanZv()};
  Double_t vtxsigma[3]={evtCuts->GetSigmaMeanXv(),evtCuts->GetSigmaMeanYv(),evtCuts->GetSigmaMeanZv()};
  AliESDVertex vtx0(vtxpos,vtxsigma);

  Double_t maxDCAr = accCuts->GetMaxDCAr();
  Double_t maxDCAz = accCuts->GetMaxDCAz();
  Int_t minTPCClust = trackCuts->GetMinNClusterTPC();

  //
  Int_t ntracks = esdEvent->GetNumberOfTracks();
  TVectorD ztrack(ntracks);
  Double_t dca[2],cov[3];
  Int_t counter=0;
  for (Int_t i=0;i <ntracks; i++){
    AliESDtrack *t = esdEvent->GetTrack(i);
    if (!t) continue;
    if (!t->GetTPCInnerParam()) continue;
    if (t->GetTPCNcls()<minTPCClust) continue;
    //

    Double_t x[3]; t->GetXYZ(x);
    Double_t b[3]; AliTracker::GetBxByBz(x,b);
    const Double_t kMaxStep = 1;   //max step over the material

    AliExternalTrackParam  *tpcTrack  = new AliExternalTrackParam(*(t->GetTPCInnerParam()));
    if(!tpcTrack) return 0;
    if (!tpcTrack->PropagateToDCABxByBz(&vtx0,b,kMaxStep,dca,cov)) continue;

    //
    if (TMath::Abs(dca[0])>maxDCAr) continue;
    //if (TMath::Sqrt(cov[0])>sigmaXYcut) continue;    
    if (TMath::Abs(tpcTrack->GetZ())>maxDCAz) continue;

    ztrack[counter]=tpcTrack->GetZ();
    counter++;    

    if(tpcTrack) delete tpcTrack;
  }

  //
  // Find LTM z position
  //
  Double_t mean=0, sigma=0;
  if (counter<ntracksMin) return 0;
  //
  Int_t nused = TMath::Nint(counter*fraction);
  if (nused==counter) nused=counter-1;  
  if (nused>1){
    AliMathBase::EvaluateUni(counter, ztrack.GetMatrixArray(), mean,sigma, TMath::Nint(counter*fraction));
    sigma/=TMath::Sqrt(nused);
  }else{
    mean  = TMath::Mean(counter, ztrack.GetMatrixArray());
    sigma = TMath::RMS(counter, ztrack.GetMatrixArray());
    sigma/=TMath::Sqrt(counter-1);
  }
  vtxpos[2]=mean;
  vtxsigma[2]=sigma;
  const AliESDVertex* vertex = new AliESDVertex(vtxpos, vtxsigma);
  return vertex;
}

//_____________________________________________________________________________
Int_t  AlidNdPtHelper::GetSPDMBTrackMult(const AliESDEvent* const esdEvent, Float_t deltaThetaCut, Float_t deltaPhiCut) 
{
  //
  // SPD track multiplicity
  //

  // get tracklets
  const AliMultiplicity* mult = esdEvent->GetMultiplicity();
  if (!mult)
     return 0;

  // get multiplicity from SPD tracklets
  Int_t inputCount = 0; 
  for (Int_t i=0; i<mult->GetNumberOfTracklets(); ++i)
  {
    //printf("%d %f %f %f\n", i, mult->GetTheta(i), mult->GetPhi(i), mult->GetDeltaPhi(i));

     Float_t phi = mult->GetPhi(i);
     if (phi < 0)
       phi += TMath::Pi() * 2;
     Float_t deltaPhi = mult->GetDeltaPhi(i);
     Float_t deltaTheta = mult->GetDeltaTheta(i);

     if (TMath::Abs(deltaPhi) > 1)
       printf("WARNING: Very high Delta Phi: %d %f %f %f\n", i, mult->GetTheta(i), mult->GetPhi(i), deltaPhi);

     if (deltaThetaCut > 0. && TMath::Abs(deltaTheta) > deltaThetaCut)
        continue;

     if (deltaPhiCut > 0. && TMath::Abs(deltaPhi) > deltaPhiCut)
        continue;
      
     ++inputCount;
  }

return inputCount;
}

//_____________________________________________________________________________
Int_t  AlidNdPtHelper::GetSPDMBPrimTrackMult(const AliESDEvent* const esdEvent, AliStack* const stack, Float_t deltaThetaCut, Float_t deltaPhiCut) 
{
  //
  // SPD track multiplicity
  //

  // get tracklets
  const AliMultiplicity* mult = esdEvent->GetMultiplicity();
  if (!mult)
     return 0;

  // get multiplicity from SPD tracklets
  Int_t inputCount = 0; 
  for (Int_t i=0; i<mult->GetNumberOfTracklets(); ++i)
  {
    //printf("%d %f %f %f\n", i, mult->GetTheta(i), mult->GetPhi(i), mult->GetDeltaPhi(i));

     Float_t phi = mult->GetPhi(i);
     if (phi < 0)
       phi += TMath::Pi() * 2;
     Float_t deltaPhi = mult->GetDeltaPhi(i);
     Float_t deltaTheta = mult->GetDeltaTheta(i);

     if (TMath::Abs(deltaPhi) > 1)
       printf("WARNING: Very high Delta Phi: %d %f %f %f\n", i, mult->GetTheta(i), mult->GetPhi(i), deltaPhi);

     if (deltaThetaCut > 0. && TMath::Abs(deltaTheta) > deltaThetaCut)
        continue;

     if (deltaPhiCut > 0. && TMath::Abs(deltaPhi) > deltaPhiCut)
        continue;


     if (mult->GetLabel(i, 0) < 0 || mult->GetLabel(i, 0) != mult->GetLabel(i, 1) || 
         !stack->IsPhysicalPrimary(mult->GetLabel(i, 0)))
        continue;

      
     ++inputCount;
  }

return inputCount;
}

//_____________________________________________________________________________

THnSparse* AlidNdPtHelper::RebinTHnSparse(const THnSparse* hist1, THnSparse* hist2, const Char_t* newname, Option_t* option)
{
    THnSparse* htemp = 0;
    const THnSparse* hist = 0;
    TString opt = option;
    opt.ToLower();
    Bool_t calcErrors = kFALSE;
    Bool_t useRange = kFALSE;
    Bool_t overwrite = kFALSE;
    if (opt.Contains("e")) { calcErrors = kTRUE; } // calcluate correct errors (not implemented)
    if (opt.Contains("r")) { useRange = kTRUE; }   // use the axis range given in hist1
    if (opt.Contains("o")) { overwrite = kTRUE; }  // overwrite hist2 instead of creating a new one
    Int_t ndim  = hist1->GetNdimensions();
    if (ndim != hist2->GetNdimensions()) {
        printf("AlidNdPtHelper::RebinTHnSparse: ERROR: Histograms have different dimensions \n");
        return 0;
    }    
    Int_t* dims = new Int_t[ndim];
    for (Int_t i = 0; i < ndim; i++) { dims[i] = i; }
    if (useRange) {         
        htemp = hist1->Projection(ndim,dims,"e");
	hist = htemp; 
    } else { hist = hist1; }
    //THnSparse* hnew = hist2->Projection(ndim,dims,"o");
    //hnew->SetName(newname);
    THnSparse* hnew = 0;
    if (overwrite) { 
        hnew = hist2;
    } else {
        hnew = (THnSparse*) hist2->Clone(newname);
    }
    for (Int_t i = 0; i < ndim; i++) { hnew->GetAxis(i)->SetRange(); }
    hnew->SetTitle(hist1->GetTitle());
    hnew->Reset();
    hnew->Sumw2();
    Double_t content;
    Double_t error;
    Int_t* c = new Int_t[ndim];
    Double_t* x = new Double_t[ndim];
    Long64_t n = hist->GetNbins();
    for (Long64_t j = 0; j < n; j++) {
        content = hist->GetBinContent(j,c);
        error = hist->GetBinError(j);
        for (Int_t i = 0; i < ndim; i++) {
            x[i] = hist->GetAxis(i)->GetBinCenter(c[i]);
        }
        /* function IsInRange is protected, shit!
        if (useRange) {
            if (! hist1->IsInRange(c)) continue;
        }
        */
        if (calcErrors) {
           // implementation to be done
        } else {
           hnew->Fill(x,content);
        }
    }
    delete[] c; c=0;
    delete[] x; x=0;
    delete[] dims; dims=0;
    if (htemp) { delete htemp; htemp = 0;}
    return hnew;
}

//_____________________________________________________________________________
AliPWG0Helper::MCProcessType AlidNdPtHelper::GetEventProcessTypePA(AliHeader* aHeader, Bool_t adebug) {
  //
  // get the process type of the event.
  //


  // Check for simple headers first

  AliGenDPMjetEventHeader* dpmJetGenHeader = dynamic_cast<AliGenDPMjetEventHeader*>(aHeader->GenEventHeader());
  if (dpmJetGenHeader) {
    return GetDPMjetEventProcessTypePA(dpmJetGenHeader,adebug);
  }
  
  // only dpmjet currently supported
  /*
  AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(aHeader->GenEventHeader());
  if (pythiaGenHeader) {
    return AliPWG0Helper::GetPythiaEventProcessType(pythiaGenHeader,adebug);
  }  
  */

  // check for cocktail

  AliGenCocktailEventHeader* genCocktailHeader = dynamic_cast<AliGenCocktailEventHeader*>(aHeader->GenEventHeader());
  if (!genCocktailHeader) {
    printf("AlidNdPtHelper::GetEventProcessTypePA : Unknown header type. \n");
    return AliPWG0Helper::kInvalidProcess;
  }

  TList* headerList = genCocktailHeader->GetHeaders();
  if (!headerList) {
    return AliPWG0Helper::kInvalidProcess;
  }

  for (Int_t i=0; i<headerList->GetEntries(); i++) {
    /*
    pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(headerList->At(i));
    if (pythiaGenHeader) {
      return AliPWG0Helper::GetPythiaEventProcessType(pythiaGenHeader,adebug);
    }
    */

    dpmJetGenHeader = dynamic_cast<AliGenDPMjetEventHeader*>(headerList->At(i));
    if (dpmJetGenHeader) {
      return GetDPMjetEventProcessTypePA(dpmJetGenHeader,adebug);
    }
  }
  return AliPWG0Helper::kInvalidProcess;
}


//_____________________________________________________________________________
AliPWG0Helper::MCProcessType AlidNdPtHelper::GetDPMjetEventProcessTypePA(AliGenEventHeader* aHeader, Bool_t adebug) {
  //
  // get the process type of the event.
  // here kSD means (pure) single diffractive
  // and kND means non-single-diffractive

  // can only read pythia headers, either directly or from cocktalil header
  AliGenDPMjetEventHeader* dpmJetGenHeader = dynamic_cast<AliGenDPMjetEventHeader*>(aHeader);

  if (!dpmJetGenHeader) {
    printf("AlidNdPtHelper::GetDPMjetProcessTypePA : Unknown header type (not DPMjet or). \n");
    return AliPWG0Helper::kInvalidProcess;
  }
   
  Int_t nsd1=0, nsd2=0, ndd=0;
  dpmJetGenHeader->GetNDiffractive(nsd1,nsd2,ndd);
  if(adebug) {
        printf("%d+%d->%d %d\n",dpmJetGenHeader->ProjectileParticipants(),dpmJetGenHeader->TargetParticipants(),nsd1,nsd2);
  }
  if((dpmJetGenHeader->ProjectileParticipants()==nsd1) && (ndd==0)) { return AliPWG0Helper::kSD; }
  else if ((dpmJetGenHeader->ProjectileParticipants()==nsd2) && (ndd==0)) { return AliPWG0Helper::kSD; }
  else { return AliPWG0Helper::kND; }
}

 AlidNdPtHelper.cxx:1
 AlidNdPtHelper.cxx:2
 AlidNdPtHelper.cxx:3
 AlidNdPtHelper.cxx:4
 AlidNdPtHelper.cxx:5
 AlidNdPtHelper.cxx:6
 AlidNdPtHelper.cxx:7
 AlidNdPtHelper.cxx:8
 AlidNdPtHelper.cxx:9
 AlidNdPtHelper.cxx:10
 AlidNdPtHelper.cxx:11
 AlidNdPtHelper.cxx:12
 AlidNdPtHelper.cxx:13
 AlidNdPtHelper.cxx:14
 AlidNdPtHelper.cxx:15
 AlidNdPtHelper.cxx:16
 AlidNdPtHelper.cxx:17
 AlidNdPtHelper.cxx:18
 AlidNdPtHelper.cxx:19
 AlidNdPtHelper.cxx:20
 AlidNdPtHelper.cxx:21
 AlidNdPtHelper.cxx:22
 AlidNdPtHelper.cxx:23
 AlidNdPtHelper.cxx:24
 AlidNdPtHelper.cxx:25
 AlidNdPtHelper.cxx:26
 AlidNdPtHelper.cxx:27
 AlidNdPtHelper.cxx:28
 AlidNdPtHelper.cxx:29
 AlidNdPtHelper.cxx:30
 AlidNdPtHelper.cxx:31
 AlidNdPtHelper.cxx:32
 AlidNdPtHelper.cxx:33
 AlidNdPtHelper.cxx:34
 AlidNdPtHelper.cxx:35
 AlidNdPtHelper.cxx:36
 AlidNdPtHelper.cxx:37
 AlidNdPtHelper.cxx:38
 AlidNdPtHelper.cxx:39
 AlidNdPtHelper.cxx:40
 AlidNdPtHelper.cxx:41
 AlidNdPtHelper.cxx:42
 AlidNdPtHelper.cxx:43
 AlidNdPtHelper.cxx:44
 AlidNdPtHelper.cxx:45
 AlidNdPtHelper.cxx:46
 AlidNdPtHelper.cxx:47
 AlidNdPtHelper.cxx:48
 AlidNdPtHelper.cxx:49
 AlidNdPtHelper.cxx:50
 AlidNdPtHelper.cxx:51
 AlidNdPtHelper.cxx:52
 AlidNdPtHelper.cxx:53
 AlidNdPtHelper.cxx:54
 AlidNdPtHelper.cxx:55
 AlidNdPtHelper.cxx:56
 AlidNdPtHelper.cxx:57
 AlidNdPtHelper.cxx:58
 AlidNdPtHelper.cxx:59
 AlidNdPtHelper.cxx:60
 AlidNdPtHelper.cxx:61
 AlidNdPtHelper.cxx:62
 AlidNdPtHelper.cxx:63
 AlidNdPtHelper.cxx:64
 AlidNdPtHelper.cxx:65
 AlidNdPtHelper.cxx:66
 AlidNdPtHelper.cxx:67
 AlidNdPtHelper.cxx:68
 AlidNdPtHelper.cxx:69
 AlidNdPtHelper.cxx:70
 AlidNdPtHelper.cxx:71
 AlidNdPtHelper.cxx:72
 AlidNdPtHelper.cxx:73
 AlidNdPtHelper.cxx:74
 AlidNdPtHelper.cxx:75
 AlidNdPtHelper.cxx:76
 AlidNdPtHelper.cxx:77
 AlidNdPtHelper.cxx:78
 AlidNdPtHelper.cxx:79
 AlidNdPtHelper.cxx:80
 AlidNdPtHelper.cxx:81
 AlidNdPtHelper.cxx:82
 AlidNdPtHelper.cxx:83
 AlidNdPtHelper.cxx:84
 AlidNdPtHelper.cxx:85
 AlidNdPtHelper.cxx:86
 AlidNdPtHelper.cxx:87
 AlidNdPtHelper.cxx:88
 AlidNdPtHelper.cxx:89
 AlidNdPtHelper.cxx:90
 AlidNdPtHelper.cxx:91
 AlidNdPtHelper.cxx:92
 AlidNdPtHelper.cxx:93
 AlidNdPtHelper.cxx:94
 AlidNdPtHelper.cxx:95
 AlidNdPtHelper.cxx:96
 AlidNdPtHelper.cxx:97
 AlidNdPtHelper.cxx:98
 AlidNdPtHelper.cxx:99
 AlidNdPtHelper.cxx:100
 AlidNdPtHelper.cxx:101
 AlidNdPtHelper.cxx:102
 AlidNdPtHelper.cxx:103
 AlidNdPtHelper.cxx:104
 AlidNdPtHelper.cxx:105
 AlidNdPtHelper.cxx:106
 AlidNdPtHelper.cxx:107
 AlidNdPtHelper.cxx:108
 AlidNdPtHelper.cxx:109
 AlidNdPtHelper.cxx:110
 AlidNdPtHelper.cxx:111
 AlidNdPtHelper.cxx:112
 AlidNdPtHelper.cxx:113
 AlidNdPtHelper.cxx:114
 AlidNdPtHelper.cxx:115
 AlidNdPtHelper.cxx:116
 AlidNdPtHelper.cxx:117
 AlidNdPtHelper.cxx:118
 AlidNdPtHelper.cxx:119
 AlidNdPtHelper.cxx:120
 AlidNdPtHelper.cxx:121
 AlidNdPtHelper.cxx:122
 AlidNdPtHelper.cxx:123
 AlidNdPtHelper.cxx:124
 AlidNdPtHelper.cxx:125
 AlidNdPtHelper.cxx:126
 AlidNdPtHelper.cxx:127
 AlidNdPtHelper.cxx:128
 AlidNdPtHelper.cxx:129
 AlidNdPtHelper.cxx:130
 AlidNdPtHelper.cxx:131
 AlidNdPtHelper.cxx:132
 AlidNdPtHelper.cxx:133
 AlidNdPtHelper.cxx:134
 AlidNdPtHelper.cxx:135
 AlidNdPtHelper.cxx:136
 AlidNdPtHelper.cxx:137
 AlidNdPtHelper.cxx:138
 AlidNdPtHelper.cxx:139
 AlidNdPtHelper.cxx:140
 AlidNdPtHelper.cxx:141
 AlidNdPtHelper.cxx:142
 AlidNdPtHelper.cxx:143
 AlidNdPtHelper.cxx:144
 AlidNdPtHelper.cxx:145
 AlidNdPtHelper.cxx:146
 AlidNdPtHelper.cxx:147
 AlidNdPtHelper.cxx:148
 AlidNdPtHelper.cxx:149
 AlidNdPtHelper.cxx:150
 AlidNdPtHelper.cxx:151
 AlidNdPtHelper.cxx:152
 AlidNdPtHelper.cxx:153
 AlidNdPtHelper.cxx:154
 AlidNdPtHelper.cxx:155
 AlidNdPtHelper.cxx:156
 AlidNdPtHelper.cxx:157
 AlidNdPtHelper.cxx:158
 AlidNdPtHelper.cxx:159
 AlidNdPtHelper.cxx:160
 AlidNdPtHelper.cxx:161
 AlidNdPtHelper.cxx:162
 AlidNdPtHelper.cxx:163
 AlidNdPtHelper.cxx:164
 AlidNdPtHelper.cxx:165
 AlidNdPtHelper.cxx:166
 AlidNdPtHelper.cxx:167
 AlidNdPtHelper.cxx:168
 AlidNdPtHelper.cxx:169
 AlidNdPtHelper.cxx:170
 AlidNdPtHelper.cxx:171
 AlidNdPtHelper.cxx:172
 AlidNdPtHelper.cxx:173
 AlidNdPtHelper.cxx:174
 AlidNdPtHelper.cxx:175
 AlidNdPtHelper.cxx:176
 AlidNdPtHelper.cxx:177
 AlidNdPtHelper.cxx:178
 AlidNdPtHelper.cxx:179
 AlidNdPtHelper.cxx:180
 AlidNdPtHelper.cxx:181
 AlidNdPtHelper.cxx:182
 AlidNdPtHelper.cxx:183
 AlidNdPtHelper.cxx:184
 AlidNdPtHelper.cxx:185
 AlidNdPtHelper.cxx:186
 AlidNdPtHelper.cxx:187
 AlidNdPtHelper.cxx:188
 AlidNdPtHelper.cxx:189
 AlidNdPtHelper.cxx:190
 AlidNdPtHelper.cxx:191
 AlidNdPtHelper.cxx:192
 AlidNdPtHelper.cxx:193
 AlidNdPtHelper.cxx:194
 AlidNdPtHelper.cxx:195
 AlidNdPtHelper.cxx:196
 AlidNdPtHelper.cxx:197
 AlidNdPtHelper.cxx:198
 AlidNdPtHelper.cxx:199
 AlidNdPtHelper.cxx:200
 AlidNdPtHelper.cxx:201
 AlidNdPtHelper.cxx:202
 AlidNdPtHelper.cxx:203
 AlidNdPtHelper.cxx:204
 AlidNdPtHelper.cxx:205
 AlidNdPtHelper.cxx:206
 AlidNdPtHelper.cxx:207
 AlidNdPtHelper.cxx:208
 AlidNdPtHelper.cxx:209
 AlidNdPtHelper.cxx:210
 AlidNdPtHelper.cxx:211
 AlidNdPtHelper.cxx:212
 AlidNdPtHelper.cxx:213
 AlidNdPtHelper.cxx:214
 AlidNdPtHelper.cxx:215
 AlidNdPtHelper.cxx:216
 AlidNdPtHelper.cxx:217
 AlidNdPtHelper.cxx:218
 AlidNdPtHelper.cxx:219
 AlidNdPtHelper.cxx:220
 AlidNdPtHelper.cxx:221
 AlidNdPtHelper.cxx:222
 AlidNdPtHelper.cxx:223
 AlidNdPtHelper.cxx:224
 AlidNdPtHelper.cxx:225
 AlidNdPtHelper.cxx:226
 AlidNdPtHelper.cxx:227
 AlidNdPtHelper.cxx:228
 AlidNdPtHelper.cxx:229
 AlidNdPtHelper.cxx:230
 AlidNdPtHelper.cxx:231
 AlidNdPtHelper.cxx:232
 AlidNdPtHelper.cxx:233
 AlidNdPtHelper.cxx:234
 AlidNdPtHelper.cxx:235
 AlidNdPtHelper.cxx:236
 AlidNdPtHelper.cxx:237
 AlidNdPtHelper.cxx:238
 AlidNdPtHelper.cxx:239
 AlidNdPtHelper.cxx:240
 AlidNdPtHelper.cxx:241
 AlidNdPtHelper.cxx:242
 AlidNdPtHelper.cxx:243
 AlidNdPtHelper.cxx:244
 AlidNdPtHelper.cxx:245
 AlidNdPtHelper.cxx:246
 AlidNdPtHelper.cxx:247
 AlidNdPtHelper.cxx:248
 AlidNdPtHelper.cxx:249
 AlidNdPtHelper.cxx:250
 AlidNdPtHelper.cxx:251
 AlidNdPtHelper.cxx:252
 AlidNdPtHelper.cxx:253
 AlidNdPtHelper.cxx:254
 AlidNdPtHelper.cxx:255
 AlidNdPtHelper.cxx:256
 AlidNdPtHelper.cxx:257
 AlidNdPtHelper.cxx:258
 AlidNdPtHelper.cxx:259
 AlidNdPtHelper.cxx:260
 AlidNdPtHelper.cxx:261
 AlidNdPtHelper.cxx:262
 AlidNdPtHelper.cxx:263
 AlidNdPtHelper.cxx:264
 AlidNdPtHelper.cxx:265
 AlidNdPtHelper.cxx:266
 AlidNdPtHelper.cxx:267
 AlidNdPtHelper.cxx:268
 AlidNdPtHelper.cxx:269
 AlidNdPtHelper.cxx:270
 AlidNdPtHelper.cxx:271
 AlidNdPtHelper.cxx:272
 AlidNdPtHelper.cxx:273
 AlidNdPtHelper.cxx:274
 AlidNdPtHelper.cxx:275
 AlidNdPtHelper.cxx:276
 AlidNdPtHelper.cxx:277
 AlidNdPtHelper.cxx:278
 AlidNdPtHelper.cxx:279
 AlidNdPtHelper.cxx:280
 AlidNdPtHelper.cxx:281
 AlidNdPtHelper.cxx:282
 AlidNdPtHelper.cxx:283
 AlidNdPtHelper.cxx:284
 AlidNdPtHelper.cxx:285
 AlidNdPtHelper.cxx:286
 AlidNdPtHelper.cxx:287
 AlidNdPtHelper.cxx:288
 AlidNdPtHelper.cxx:289
 AlidNdPtHelper.cxx:290
 AlidNdPtHelper.cxx:291
 AlidNdPtHelper.cxx:292
 AlidNdPtHelper.cxx:293
 AlidNdPtHelper.cxx:294
 AlidNdPtHelper.cxx:295
 AlidNdPtHelper.cxx:296
 AlidNdPtHelper.cxx:297
 AlidNdPtHelper.cxx:298
 AlidNdPtHelper.cxx:299
 AlidNdPtHelper.cxx:300
 AlidNdPtHelper.cxx:301
 AlidNdPtHelper.cxx:302
 AlidNdPtHelper.cxx:303
 AlidNdPtHelper.cxx:304
 AlidNdPtHelper.cxx:305
 AlidNdPtHelper.cxx:306
 AlidNdPtHelper.cxx:307
 AlidNdPtHelper.cxx:308
 AlidNdPtHelper.cxx:309
 AlidNdPtHelper.cxx:310
 AlidNdPtHelper.cxx:311
 AlidNdPtHelper.cxx:312
 AlidNdPtHelper.cxx:313
 AlidNdPtHelper.cxx:314
 AlidNdPtHelper.cxx:315
 AlidNdPtHelper.cxx:316
 AlidNdPtHelper.cxx:317
 AlidNdPtHelper.cxx:318
 AlidNdPtHelper.cxx:319
 AlidNdPtHelper.cxx:320
 AlidNdPtHelper.cxx:321
 AlidNdPtHelper.cxx:322
 AlidNdPtHelper.cxx:323
 AlidNdPtHelper.cxx:324
 AlidNdPtHelper.cxx:325
 AlidNdPtHelper.cxx:326
 AlidNdPtHelper.cxx:327
 AlidNdPtHelper.cxx:328
 AlidNdPtHelper.cxx:329
 AlidNdPtHelper.cxx:330
 AlidNdPtHelper.cxx:331
 AlidNdPtHelper.cxx:332
 AlidNdPtHelper.cxx:333
 AlidNdPtHelper.cxx:334
 AlidNdPtHelper.cxx:335
 AlidNdPtHelper.cxx:336
 AlidNdPtHelper.cxx:337
 AlidNdPtHelper.cxx:338
 AlidNdPtHelper.cxx:339
 AlidNdPtHelper.cxx:340
 AlidNdPtHelper.cxx:341
 AlidNdPtHelper.cxx:342
 AlidNdPtHelper.cxx:343
 AlidNdPtHelper.cxx:344
 AlidNdPtHelper.cxx:345
 AlidNdPtHelper.cxx:346
 AlidNdPtHelper.cxx:347
 AlidNdPtHelper.cxx:348
 AlidNdPtHelper.cxx:349
 AlidNdPtHelper.cxx:350
 AlidNdPtHelper.cxx:351
 AlidNdPtHelper.cxx:352
 AlidNdPtHelper.cxx:353
 AlidNdPtHelper.cxx:354
 AlidNdPtHelper.cxx:355
 AlidNdPtHelper.cxx:356
 AlidNdPtHelper.cxx:357
 AlidNdPtHelper.cxx:358
 AlidNdPtHelper.cxx:359
 AlidNdPtHelper.cxx:360
 AlidNdPtHelper.cxx:361
 AlidNdPtHelper.cxx:362
 AlidNdPtHelper.cxx:363
 AlidNdPtHelper.cxx:364
 AlidNdPtHelper.cxx:365
 AlidNdPtHelper.cxx:366
 AlidNdPtHelper.cxx:367
 AlidNdPtHelper.cxx:368
 AlidNdPtHelper.cxx:369
 AlidNdPtHelper.cxx:370
 AlidNdPtHelper.cxx:371
 AlidNdPtHelper.cxx:372
 AlidNdPtHelper.cxx:373
 AlidNdPtHelper.cxx:374
 AlidNdPtHelper.cxx:375
 AlidNdPtHelper.cxx:376
 AlidNdPtHelper.cxx:377
 AlidNdPtHelper.cxx:378
 AlidNdPtHelper.cxx:379
 AlidNdPtHelper.cxx:380
 AlidNdPtHelper.cxx:381
 AlidNdPtHelper.cxx:382
 AlidNdPtHelper.cxx:383
 AlidNdPtHelper.cxx:384
 AlidNdPtHelper.cxx:385
 AlidNdPtHelper.cxx:386
 AlidNdPtHelper.cxx:387
 AlidNdPtHelper.cxx:388
 AlidNdPtHelper.cxx:389
 AlidNdPtHelper.cxx:390
 AlidNdPtHelper.cxx:391
 AlidNdPtHelper.cxx:392
 AlidNdPtHelper.cxx:393
 AlidNdPtHelper.cxx:394
 AlidNdPtHelper.cxx:395
 AlidNdPtHelper.cxx:396
 AlidNdPtHelper.cxx:397
 AlidNdPtHelper.cxx:398
 AlidNdPtHelper.cxx:399
 AlidNdPtHelper.cxx:400
 AlidNdPtHelper.cxx:401
 AlidNdPtHelper.cxx:402
 AlidNdPtHelper.cxx:403
 AlidNdPtHelper.cxx:404
 AlidNdPtHelper.cxx:405
 AlidNdPtHelper.cxx:406
 AlidNdPtHelper.cxx:407
 AlidNdPtHelper.cxx:408
 AlidNdPtHelper.cxx:409
 AlidNdPtHelper.cxx:410
 AlidNdPtHelper.cxx:411
 AlidNdPtHelper.cxx:412
 AlidNdPtHelper.cxx:413
 AlidNdPtHelper.cxx:414
 AlidNdPtHelper.cxx:415
 AlidNdPtHelper.cxx:416
 AlidNdPtHelper.cxx:417
 AlidNdPtHelper.cxx:418
 AlidNdPtHelper.cxx:419
 AlidNdPtHelper.cxx:420
 AlidNdPtHelper.cxx:421
 AlidNdPtHelper.cxx:422
 AlidNdPtHelper.cxx:423
 AlidNdPtHelper.cxx:424
 AlidNdPtHelper.cxx:425
 AlidNdPtHelper.cxx:426
 AlidNdPtHelper.cxx:427
 AlidNdPtHelper.cxx:428
 AlidNdPtHelper.cxx:429
 AlidNdPtHelper.cxx:430
 AlidNdPtHelper.cxx:431
 AlidNdPtHelper.cxx:432
 AlidNdPtHelper.cxx:433
 AlidNdPtHelper.cxx:434
 AlidNdPtHelper.cxx:435
 AlidNdPtHelper.cxx:436
 AlidNdPtHelper.cxx:437
 AlidNdPtHelper.cxx:438
 AlidNdPtHelper.cxx:439
 AlidNdPtHelper.cxx:440
 AlidNdPtHelper.cxx:441
 AlidNdPtHelper.cxx:442
 AlidNdPtHelper.cxx:443
 AlidNdPtHelper.cxx:444
 AlidNdPtHelper.cxx:445
 AlidNdPtHelper.cxx:446
 AlidNdPtHelper.cxx:447
 AlidNdPtHelper.cxx:448
 AlidNdPtHelper.cxx:449
 AlidNdPtHelper.cxx:450
 AlidNdPtHelper.cxx:451
 AlidNdPtHelper.cxx:452
 AlidNdPtHelper.cxx:453
 AlidNdPtHelper.cxx:454
 AlidNdPtHelper.cxx:455
 AlidNdPtHelper.cxx:456
 AlidNdPtHelper.cxx:457
 AlidNdPtHelper.cxx:458
 AlidNdPtHelper.cxx:459
 AlidNdPtHelper.cxx:460
 AlidNdPtHelper.cxx:461
 AlidNdPtHelper.cxx:462
 AlidNdPtHelper.cxx:463
 AlidNdPtHelper.cxx:464
 AlidNdPtHelper.cxx:465
 AlidNdPtHelper.cxx:466
 AlidNdPtHelper.cxx:467
 AlidNdPtHelper.cxx:468
 AlidNdPtHelper.cxx:469
 AlidNdPtHelper.cxx:470
 AlidNdPtHelper.cxx:471
 AlidNdPtHelper.cxx:472
 AlidNdPtHelper.cxx:473
 AlidNdPtHelper.cxx:474
 AlidNdPtHelper.cxx:475
 AlidNdPtHelper.cxx:476
 AlidNdPtHelper.cxx:477
 AlidNdPtHelper.cxx:478
 AlidNdPtHelper.cxx:479
 AlidNdPtHelper.cxx:480
 AlidNdPtHelper.cxx:481
 AlidNdPtHelper.cxx:482
 AlidNdPtHelper.cxx:483
 AlidNdPtHelper.cxx:484
 AlidNdPtHelper.cxx:485
 AlidNdPtHelper.cxx:486
 AlidNdPtHelper.cxx:487
 AlidNdPtHelper.cxx:488
 AlidNdPtHelper.cxx:489
 AlidNdPtHelper.cxx:490
 AlidNdPtHelper.cxx:491
 AlidNdPtHelper.cxx:492
 AlidNdPtHelper.cxx:493
 AlidNdPtHelper.cxx:494
 AlidNdPtHelper.cxx:495
 AlidNdPtHelper.cxx:496
 AlidNdPtHelper.cxx:497
 AlidNdPtHelper.cxx:498
 AlidNdPtHelper.cxx:499
 AlidNdPtHelper.cxx:500
 AlidNdPtHelper.cxx:501
 AlidNdPtHelper.cxx:502
 AlidNdPtHelper.cxx:503
 AlidNdPtHelper.cxx:504
 AlidNdPtHelper.cxx:505
 AlidNdPtHelper.cxx:506
 AlidNdPtHelper.cxx:507
 AlidNdPtHelper.cxx:508
 AlidNdPtHelper.cxx:509
 AlidNdPtHelper.cxx:510
 AlidNdPtHelper.cxx:511
 AlidNdPtHelper.cxx:512
 AlidNdPtHelper.cxx:513
 AlidNdPtHelper.cxx:514
 AlidNdPtHelper.cxx:515
 AlidNdPtHelper.cxx:516
 AlidNdPtHelper.cxx:517
 AlidNdPtHelper.cxx:518
 AlidNdPtHelper.cxx:519
 AlidNdPtHelper.cxx:520
 AlidNdPtHelper.cxx:521
 AlidNdPtHelper.cxx:522
 AlidNdPtHelper.cxx:523
 AlidNdPtHelper.cxx:524
 AlidNdPtHelper.cxx:525
 AlidNdPtHelper.cxx:526
 AlidNdPtHelper.cxx:527
 AlidNdPtHelper.cxx:528
 AlidNdPtHelper.cxx:529
 AlidNdPtHelper.cxx:530
 AlidNdPtHelper.cxx:531
 AlidNdPtHelper.cxx:532
 AlidNdPtHelper.cxx:533
 AlidNdPtHelper.cxx:534
 AlidNdPtHelper.cxx:535
 AlidNdPtHelper.cxx:536
 AlidNdPtHelper.cxx:537
 AlidNdPtHelper.cxx:538
 AlidNdPtHelper.cxx:539
 AlidNdPtHelper.cxx:540
 AlidNdPtHelper.cxx:541
 AlidNdPtHelper.cxx:542
 AlidNdPtHelper.cxx:543
 AlidNdPtHelper.cxx:544
 AlidNdPtHelper.cxx:545
 AlidNdPtHelper.cxx:546
 AlidNdPtHelper.cxx:547
 AlidNdPtHelper.cxx:548
 AlidNdPtHelper.cxx:549
 AlidNdPtHelper.cxx:550
 AlidNdPtHelper.cxx:551
 AlidNdPtHelper.cxx:552
 AlidNdPtHelper.cxx:553
 AlidNdPtHelper.cxx:554
 AlidNdPtHelper.cxx:555
 AlidNdPtHelper.cxx:556
 AlidNdPtHelper.cxx:557
 AlidNdPtHelper.cxx:558
 AlidNdPtHelper.cxx:559
 AlidNdPtHelper.cxx:560
 AlidNdPtHelper.cxx:561
 AlidNdPtHelper.cxx:562
 AlidNdPtHelper.cxx:563
 AlidNdPtHelper.cxx:564
 AlidNdPtHelper.cxx:565
 AlidNdPtHelper.cxx:566
 AlidNdPtHelper.cxx:567
 AlidNdPtHelper.cxx:568
 AlidNdPtHelper.cxx:569
 AlidNdPtHelper.cxx:570
 AlidNdPtHelper.cxx:571
 AlidNdPtHelper.cxx:572
 AlidNdPtHelper.cxx:573
 AlidNdPtHelper.cxx:574
 AlidNdPtHelper.cxx:575
 AlidNdPtHelper.cxx:576
 AlidNdPtHelper.cxx:577
 AlidNdPtHelper.cxx:578
 AlidNdPtHelper.cxx:579
 AlidNdPtHelper.cxx:580
 AlidNdPtHelper.cxx:581
 AlidNdPtHelper.cxx:582
 AlidNdPtHelper.cxx:583
 AlidNdPtHelper.cxx:584
 AlidNdPtHelper.cxx:585
 AlidNdPtHelper.cxx:586
 AlidNdPtHelper.cxx:587
 AlidNdPtHelper.cxx:588
 AlidNdPtHelper.cxx:589
 AlidNdPtHelper.cxx:590
 AlidNdPtHelper.cxx:591
 AlidNdPtHelper.cxx:592
 AlidNdPtHelper.cxx:593
 AlidNdPtHelper.cxx:594
 AlidNdPtHelper.cxx:595
 AlidNdPtHelper.cxx:596
 AlidNdPtHelper.cxx:597
 AlidNdPtHelper.cxx:598
 AlidNdPtHelper.cxx:599
 AlidNdPtHelper.cxx:600
 AlidNdPtHelper.cxx:601
 AlidNdPtHelper.cxx:602
 AlidNdPtHelper.cxx:603
 AlidNdPtHelper.cxx:604
 AlidNdPtHelper.cxx:605
 AlidNdPtHelper.cxx:606
 AlidNdPtHelper.cxx:607
 AlidNdPtHelper.cxx:608
 AlidNdPtHelper.cxx:609
 AlidNdPtHelper.cxx:610
 AlidNdPtHelper.cxx:611
 AlidNdPtHelper.cxx:612
 AlidNdPtHelper.cxx:613
 AlidNdPtHelper.cxx:614
 AlidNdPtHelper.cxx:615
 AlidNdPtHelper.cxx:616
 AlidNdPtHelper.cxx:617
 AlidNdPtHelper.cxx:618
 AlidNdPtHelper.cxx:619
 AlidNdPtHelper.cxx:620
 AlidNdPtHelper.cxx:621
 AlidNdPtHelper.cxx:622
 AlidNdPtHelper.cxx:623
 AlidNdPtHelper.cxx:624
 AlidNdPtHelper.cxx:625
 AlidNdPtHelper.cxx:626
 AlidNdPtHelper.cxx:627
 AlidNdPtHelper.cxx:628
 AlidNdPtHelper.cxx:629
 AlidNdPtHelper.cxx:630
 AlidNdPtHelper.cxx:631
 AlidNdPtHelper.cxx:632
 AlidNdPtHelper.cxx:633
 AlidNdPtHelper.cxx:634
 AlidNdPtHelper.cxx:635
 AlidNdPtHelper.cxx:636
 AlidNdPtHelper.cxx:637
 AlidNdPtHelper.cxx:638
 AlidNdPtHelper.cxx:639
 AlidNdPtHelper.cxx:640
 AlidNdPtHelper.cxx:641
 AlidNdPtHelper.cxx:642
 AlidNdPtHelper.cxx:643
 AlidNdPtHelper.cxx:644
 AlidNdPtHelper.cxx:645
 AlidNdPtHelper.cxx:646
 AlidNdPtHelper.cxx:647
 AlidNdPtHelper.cxx:648
 AlidNdPtHelper.cxx:649
 AlidNdPtHelper.cxx:650
 AlidNdPtHelper.cxx:651
 AlidNdPtHelper.cxx:652
 AlidNdPtHelper.cxx:653
 AlidNdPtHelper.cxx:654
 AlidNdPtHelper.cxx:655
 AlidNdPtHelper.cxx:656
 AlidNdPtHelper.cxx:657
 AlidNdPtHelper.cxx:658
 AlidNdPtHelper.cxx:659
 AlidNdPtHelper.cxx:660
 AlidNdPtHelper.cxx:661
 AlidNdPtHelper.cxx:662
 AlidNdPtHelper.cxx:663
 AlidNdPtHelper.cxx:664
 AlidNdPtHelper.cxx:665
 AlidNdPtHelper.cxx:666
 AlidNdPtHelper.cxx:667
 AlidNdPtHelper.cxx:668
 AlidNdPtHelper.cxx:669
 AlidNdPtHelper.cxx:670
 AlidNdPtHelper.cxx:671
 AlidNdPtHelper.cxx:672
 AlidNdPtHelper.cxx:673
 AlidNdPtHelper.cxx:674
 AlidNdPtHelper.cxx:675
 AlidNdPtHelper.cxx:676
 AlidNdPtHelper.cxx:677
 AlidNdPtHelper.cxx:678
 AlidNdPtHelper.cxx:679
 AlidNdPtHelper.cxx:680
 AlidNdPtHelper.cxx:681
 AlidNdPtHelper.cxx:682
 AlidNdPtHelper.cxx:683
 AlidNdPtHelper.cxx:684
 AlidNdPtHelper.cxx:685
 AlidNdPtHelper.cxx:686
 AlidNdPtHelper.cxx:687
 AlidNdPtHelper.cxx:688
 AlidNdPtHelper.cxx:689
 AlidNdPtHelper.cxx:690
 AlidNdPtHelper.cxx:691
 AlidNdPtHelper.cxx:692
 AlidNdPtHelper.cxx:693
 AlidNdPtHelper.cxx:694
 AlidNdPtHelper.cxx:695
 AlidNdPtHelper.cxx:696
 AlidNdPtHelper.cxx:697
 AlidNdPtHelper.cxx:698
 AlidNdPtHelper.cxx:699
 AlidNdPtHelper.cxx:700
 AlidNdPtHelper.cxx:701
 AlidNdPtHelper.cxx:702
 AlidNdPtHelper.cxx:703
 AlidNdPtHelper.cxx:704
 AlidNdPtHelper.cxx:705
 AlidNdPtHelper.cxx:706
 AlidNdPtHelper.cxx:707
 AlidNdPtHelper.cxx:708
 AlidNdPtHelper.cxx:709
 AlidNdPtHelper.cxx:710
 AlidNdPtHelper.cxx:711
 AlidNdPtHelper.cxx:712
 AlidNdPtHelper.cxx:713
 AlidNdPtHelper.cxx:714
 AlidNdPtHelper.cxx:715
 AlidNdPtHelper.cxx:716
 AlidNdPtHelper.cxx:717
 AlidNdPtHelper.cxx:718
 AlidNdPtHelper.cxx:719
 AlidNdPtHelper.cxx:720
 AlidNdPtHelper.cxx:721
 AlidNdPtHelper.cxx:722
 AlidNdPtHelper.cxx:723
 AlidNdPtHelper.cxx:724
 AlidNdPtHelper.cxx:725
 AlidNdPtHelper.cxx:726
 AlidNdPtHelper.cxx:727
 AlidNdPtHelper.cxx:728
 AlidNdPtHelper.cxx:729
 AlidNdPtHelper.cxx:730
 AlidNdPtHelper.cxx:731
 AlidNdPtHelper.cxx:732
 AlidNdPtHelper.cxx:733
 AlidNdPtHelper.cxx:734
 AlidNdPtHelper.cxx:735
 AlidNdPtHelper.cxx:736
 AlidNdPtHelper.cxx:737
 AlidNdPtHelper.cxx:738
 AlidNdPtHelper.cxx:739
 AlidNdPtHelper.cxx:740
 AlidNdPtHelper.cxx:741
 AlidNdPtHelper.cxx:742
 AlidNdPtHelper.cxx:743
 AlidNdPtHelper.cxx:744
 AlidNdPtHelper.cxx:745
 AlidNdPtHelper.cxx:746
 AlidNdPtHelper.cxx:747
 AlidNdPtHelper.cxx:748
 AlidNdPtHelper.cxx:749
 AlidNdPtHelper.cxx:750
 AlidNdPtHelper.cxx:751
 AlidNdPtHelper.cxx:752
 AlidNdPtHelper.cxx:753
 AlidNdPtHelper.cxx:754
 AlidNdPtHelper.cxx:755
 AlidNdPtHelper.cxx:756
 AlidNdPtHelper.cxx:757
 AlidNdPtHelper.cxx:758
 AlidNdPtHelper.cxx:759
 AlidNdPtHelper.cxx:760
 AlidNdPtHelper.cxx:761
 AlidNdPtHelper.cxx:762
 AlidNdPtHelper.cxx:763
 AlidNdPtHelper.cxx:764
 AlidNdPtHelper.cxx:765
 AlidNdPtHelper.cxx:766
 AlidNdPtHelper.cxx:767
 AlidNdPtHelper.cxx:768
 AlidNdPtHelper.cxx:769
 AlidNdPtHelper.cxx:770
 AlidNdPtHelper.cxx:771
 AlidNdPtHelper.cxx:772
 AlidNdPtHelper.cxx:773
 AlidNdPtHelper.cxx:774
 AlidNdPtHelper.cxx:775
 AlidNdPtHelper.cxx:776
 AlidNdPtHelper.cxx:777
 AlidNdPtHelper.cxx:778
 AlidNdPtHelper.cxx:779
 AlidNdPtHelper.cxx:780
 AlidNdPtHelper.cxx:781
 AlidNdPtHelper.cxx:782
 AlidNdPtHelper.cxx:783
 AlidNdPtHelper.cxx:784
 AlidNdPtHelper.cxx:785
 AlidNdPtHelper.cxx:786
 AlidNdPtHelper.cxx:787
 AlidNdPtHelper.cxx:788
 AlidNdPtHelper.cxx:789
 AlidNdPtHelper.cxx:790
 AlidNdPtHelper.cxx:791
 AlidNdPtHelper.cxx:792
 AlidNdPtHelper.cxx:793
 AlidNdPtHelper.cxx:794
 AlidNdPtHelper.cxx:795
 AlidNdPtHelper.cxx:796
 AlidNdPtHelper.cxx:797
 AlidNdPtHelper.cxx:798
 AlidNdPtHelper.cxx:799
 AlidNdPtHelper.cxx:800
 AlidNdPtHelper.cxx:801
 AlidNdPtHelper.cxx:802
 AlidNdPtHelper.cxx:803
 AlidNdPtHelper.cxx:804
 AlidNdPtHelper.cxx:805
 AlidNdPtHelper.cxx:806
 AlidNdPtHelper.cxx:807
 AlidNdPtHelper.cxx:808
 AlidNdPtHelper.cxx:809
 AlidNdPtHelper.cxx:810
 AlidNdPtHelper.cxx:811
 AlidNdPtHelper.cxx:812
 AlidNdPtHelper.cxx:813
 AlidNdPtHelper.cxx:814
 AlidNdPtHelper.cxx:815
 AlidNdPtHelper.cxx:816
 AlidNdPtHelper.cxx:817
 AlidNdPtHelper.cxx:818
 AlidNdPtHelper.cxx:819
 AlidNdPtHelper.cxx:820
 AlidNdPtHelper.cxx:821
 AlidNdPtHelper.cxx:822
 AlidNdPtHelper.cxx:823
 AlidNdPtHelper.cxx:824
 AlidNdPtHelper.cxx:825
 AlidNdPtHelper.cxx:826
 AlidNdPtHelper.cxx:827
 AlidNdPtHelper.cxx:828
 AlidNdPtHelper.cxx:829
 AlidNdPtHelper.cxx:830
 AlidNdPtHelper.cxx:831
 AlidNdPtHelper.cxx:832
 AlidNdPtHelper.cxx:833
 AlidNdPtHelper.cxx:834
 AlidNdPtHelper.cxx:835
 AlidNdPtHelper.cxx:836
 AlidNdPtHelper.cxx:837
 AlidNdPtHelper.cxx:838
 AlidNdPtHelper.cxx:839
 AlidNdPtHelper.cxx:840
 AlidNdPtHelper.cxx:841
 AlidNdPtHelper.cxx:842
 AlidNdPtHelper.cxx:843
 AlidNdPtHelper.cxx:844
 AlidNdPtHelper.cxx:845
 AlidNdPtHelper.cxx:846
 AlidNdPtHelper.cxx:847
 AlidNdPtHelper.cxx:848
 AlidNdPtHelper.cxx:849
 AlidNdPtHelper.cxx:850
 AlidNdPtHelper.cxx:851
 AlidNdPtHelper.cxx:852
 AlidNdPtHelper.cxx:853
 AlidNdPtHelper.cxx:854
 AlidNdPtHelper.cxx:855
 AlidNdPtHelper.cxx:856
 AlidNdPtHelper.cxx:857
 AlidNdPtHelper.cxx:858
 AlidNdPtHelper.cxx:859
 AlidNdPtHelper.cxx:860
 AlidNdPtHelper.cxx:861
 AlidNdPtHelper.cxx:862
 AlidNdPtHelper.cxx:863
 AlidNdPtHelper.cxx:864
 AlidNdPtHelper.cxx:865
 AlidNdPtHelper.cxx:866
 AlidNdPtHelper.cxx:867
 AlidNdPtHelper.cxx:868
 AlidNdPtHelper.cxx:869
 AlidNdPtHelper.cxx:870
 AlidNdPtHelper.cxx:871
 AlidNdPtHelper.cxx:872
 AlidNdPtHelper.cxx:873
 AlidNdPtHelper.cxx:874
 AlidNdPtHelper.cxx:875
 AlidNdPtHelper.cxx:876
 AlidNdPtHelper.cxx:877
 AlidNdPtHelper.cxx:878
 AlidNdPtHelper.cxx:879
 AlidNdPtHelper.cxx:880
 AlidNdPtHelper.cxx:881
 AlidNdPtHelper.cxx:882
 AlidNdPtHelper.cxx:883
 AlidNdPtHelper.cxx:884
 AlidNdPtHelper.cxx:885
 AlidNdPtHelper.cxx:886
 AlidNdPtHelper.cxx:887
 AlidNdPtHelper.cxx:888
 AlidNdPtHelper.cxx:889
 AlidNdPtHelper.cxx:890
 AlidNdPtHelper.cxx:891
 AlidNdPtHelper.cxx:892
 AlidNdPtHelper.cxx:893
 AlidNdPtHelper.cxx:894
 AlidNdPtHelper.cxx:895
 AlidNdPtHelper.cxx:896
 AlidNdPtHelper.cxx:897
 AlidNdPtHelper.cxx:898
 AlidNdPtHelper.cxx:899
 AlidNdPtHelper.cxx:900
 AlidNdPtHelper.cxx:901
 AlidNdPtHelper.cxx:902
 AlidNdPtHelper.cxx:903
 AlidNdPtHelper.cxx:904
 AlidNdPtHelper.cxx:905
 AlidNdPtHelper.cxx:906
 AlidNdPtHelper.cxx:907
 AlidNdPtHelper.cxx:908
 AlidNdPtHelper.cxx:909
 AlidNdPtHelper.cxx:910
 AlidNdPtHelper.cxx:911
 AlidNdPtHelper.cxx:912
 AlidNdPtHelper.cxx:913
 AlidNdPtHelper.cxx:914
 AlidNdPtHelper.cxx:915
 AlidNdPtHelper.cxx:916
 AlidNdPtHelper.cxx:917
 AlidNdPtHelper.cxx:918
 AlidNdPtHelper.cxx:919
 AlidNdPtHelper.cxx:920
 AlidNdPtHelper.cxx:921
 AlidNdPtHelper.cxx:922
 AlidNdPtHelper.cxx:923
 AlidNdPtHelper.cxx:924
 AlidNdPtHelper.cxx:925
 AlidNdPtHelper.cxx:926
 AlidNdPtHelper.cxx:927
 AlidNdPtHelper.cxx:928
 AlidNdPtHelper.cxx:929
 AlidNdPtHelper.cxx:930
 AlidNdPtHelper.cxx:931
 AlidNdPtHelper.cxx:932
 AlidNdPtHelper.cxx:933
 AlidNdPtHelper.cxx:934
 AlidNdPtHelper.cxx:935
 AlidNdPtHelper.cxx:936
 AlidNdPtHelper.cxx:937
 AlidNdPtHelper.cxx:938
 AlidNdPtHelper.cxx:939
 AlidNdPtHelper.cxx:940
 AlidNdPtHelper.cxx:941
 AlidNdPtHelper.cxx:942
 AlidNdPtHelper.cxx:943
 AlidNdPtHelper.cxx:944
 AlidNdPtHelper.cxx:945
 AlidNdPtHelper.cxx:946
 AlidNdPtHelper.cxx:947
 AlidNdPtHelper.cxx:948
 AlidNdPtHelper.cxx:949
 AlidNdPtHelper.cxx:950
 AlidNdPtHelper.cxx:951
 AlidNdPtHelper.cxx:952
 AlidNdPtHelper.cxx:953
 AlidNdPtHelper.cxx:954
 AlidNdPtHelper.cxx:955
 AlidNdPtHelper.cxx:956
 AlidNdPtHelper.cxx:957
 AlidNdPtHelper.cxx:958
 AlidNdPtHelper.cxx:959
 AlidNdPtHelper.cxx:960
 AlidNdPtHelper.cxx:961
 AlidNdPtHelper.cxx:962
 AlidNdPtHelper.cxx:963
 AlidNdPtHelper.cxx:964
 AlidNdPtHelper.cxx:965
 AlidNdPtHelper.cxx:966
 AlidNdPtHelper.cxx:967
 AlidNdPtHelper.cxx:968
 AlidNdPtHelper.cxx:969
 AlidNdPtHelper.cxx:970
 AlidNdPtHelper.cxx:971
 AlidNdPtHelper.cxx:972
 AlidNdPtHelper.cxx:973
 AlidNdPtHelper.cxx:974
 AlidNdPtHelper.cxx:975
 AlidNdPtHelper.cxx:976
 AlidNdPtHelper.cxx:977
 AlidNdPtHelper.cxx:978
 AlidNdPtHelper.cxx:979
 AlidNdPtHelper.cxx:980
 AlidNdPtHelper.cxx:981
 AlidNdPtHelper.cxx:982
 AlidNdPtHelper.cxx:983
 AlidNdPtHelper.cxx:984
 AlidNdPtHelper.cxx:985
 AlidNdPtHelper.cxx:986
 AlidNdPtHelper.cxx:987
 AlidNdPtHelper.cxx:988
 AlidNdPtHelper.cxx:989
 AlidNdPtHelper.cxx:990
 AlidNdPtHelper.cxx:991
 AlidNdPtHelper.cxx:992
 AlidNdPtHelper.cxx:993
 AlidNdPtHelper.cxx:994
 AlidNdPtHelper.cxx:995
 AlidNdPtHelper.cxx:996
 AlidNdPtHelper.cxx:997
 AlidNdPtHelper.cxx:998
 AlidNdPtHelper.cxx:999
 AlidNdPtHelper.cxx:1000
 AlidNdPtHelper.cxx:1001
 AlidNdPtHelper.cxx:1002
 AlidNdPtHelper.cxx:1003
 AlidNdPtHelper.cxx:1004
 AlidNdPtHelper.cxx:1005
 AlidNdPtHelper.cxx:1006
 AlidNdPtHelper.cxx:1007
 AlidNdPtHelper.cxx:1008
 AlidNdPtHelper.cxx:1009
 AlidNdPtHelper.cxx:1010
 AlidNdPtHelper.cxx:1011
 AlidNdPtHelper.cxx:1012
 AlidNdPtHelper.cxx:1013
 AlidNdPtHelper.cxx:1014
 AlidNdPtHelper.cxx:1015
 AlidNdPtHelper.cxx:1016
 AlidNdPtHelper.cxx:1017
 AlidNdPtHelper.cxx:1018
 AlidNdPtHelper.cxx:1019
 AlidNdPtHelper.cxx:1020
 AlidNdPtHelper.cxx:1021
 AlidNdPtHelper.cxx:1022
 AlidNdPtHelper.cxx:1023
 AlidNdPtHelper.cxx:1024
 AlidNdPtHelper.cxx:1025
 AlidNdPtHelper.cxx:1026
 AlidNdPtHelper.cxx:1027
 AlidNdPtHelper.cxx:1028
 AlidNdPtHelper.cxx:1029
 AlidNdPtHelper.cxx:1030
 AlidNdPtHelper.cxx:1031
 AlidNdPtHelper.cxx:1032
 AlidNdPtHelper.cxx:1033
 AlidNdPtHelper.cxx:1034
 AlidNdPtHelper.cxx:1035
 AlidNdPtHelper.cxx:1036
 AlidNdPtHelper.cxx:1037
 AlidNdPtHelper.cxx:1038
 AlidNdPtHelper.cxx:1039
 AlidNdPtHelper.cxx:1040
 AlidNdPtHelper.cxx:1041
 AlidNdPtHelper.cxx:1042
 AlidNdPtHelper.cxx:1043
 AlidNdPtHelper.cxx:1044
 AlidNdPtHelper.cxx:1045
 AlidNdPtHelper.cxx:1046
 AlidNdPtHelper.cxx:1047
 AlidNdPtHelper.cxx:1048
 AlidNdPtHelper.cxx:1049
 AlidNdPtHelper.cxx:1050
 AlidNdPtHelper.cxx:1051
 AlidNdPtHelper.cxx:1052
 AlidNdPtHelper.cxx:1053
 AlidNdPtHelper.cxx:1054
 AlidNdPtHelper.cxx:1055
 AlidNdPtHelper.cxx:1056
 AlidNdPtHelper.cxx:1057
 AlidNdPtHelper.cxx:1058
 AlidNdPtHelper.cxx:1059
 AlidNdPtHelper.cxx:1060
 AlidNdPtHelper.cxx:1061
 AlidNdPtHelper.cxx:1062
 AlidNdPtHelper.cxx:1063
 AlidNdPtHelper.cxx:1064
 AlidNdPtHelper.cxx:1065
 AlidNdPtHelper.cxx:1066
 AlidNdPtHelper.cxx:1067
 AlidNdPtHelper.cxx:1068
 AlidNdPtHelper.cxx:1069
 AlidNdPtHelper.cxx:1070
 AlidNdPtHelper.cxx:1071
 AlidNdPtHelper.cxx:1072
 AlidNdPtHelper.cxx:1073
 AlidNdPtHelper.cxx:1074
 AlidNdPtHelper.cxx:1075
 AlidNdPtHelper.cxx:1076
 AlidNdPtHelper.cxx:1077
 AlidNdPtHelper.cxx:1078
 AlidNdPtHelper.cxx:1079
 AlidNdPtHelper.cxx:1080
 AlidNdPtHelper.cxx:1081
 AlidNdPtHelper.cxx:1082
 AlidNdPtHelper.cxx:1083
 AlidNdPtHelper.cxx:1084
 AlidNdPtHelper.cxx:1085
 AlidNdPtHelper.cxx:1086
 AlidNdPtHelper.cxx:1087
 AlidNdPtHelper.cxx:1088
 AlidNdPtHelper.cxx:1089
 AlidNdPtHelper.cxx:1090
 AlidNdPtHelper.cxx:1091
 AlidNdPtHelper.cxx:1092
 AlidNdPtHelper.cxx:1093
 AlidNdPtHelper.cxx:1094
 AlidNdPtHelper.cxx:1095
 AlidNdPtHelper.cxx:1096
 AlidNdPtHelper.cxx:1097
 AlidNdPtHelper.cxx:1098
 AlidNdPtHelper.cxx:1099
 AlidNdPtHelper.cxx:1100
 AlidNdPtHelper.cxx:1101
 AlidNdPtHelper.cxx:1102
 AlidNdPtHelper.cxx:1103
 AlidNdPtHelper.cxx:1104
 AlidNdPtHelper.cxx:1105
 AlidNdPtHelper.cxx:1106
 AlidNdPtHelper.cxx:1107
 AlidNdPtHelper.cxx:1108
 AlidNdPtHelper.cxx:1109
 AlidNdPtHelper.cxx:1110
 AlidNdPtHelper.cxx:1111
 AlidNdPtHelper.cxx:1112
 AlidNdPtHelper.cxx:1113
 AlidNdPtHelper.cxx:1114
 AlidNdPtHelper.cxx:1115
 AlidNdPtHelper.cxx:1116
 AlidNdPtHelper.cxx:1117
 AlidNdPtHelper.cxx:1118
 AlidNdPtHelper.cxx:1119
 AlidNdPtHelper.cxx:1120
 AlidNdPtHelper.cxx:1121
 AlidNdPtHelper.cxx:1122
 AlidNdPtHelper.cxx:1123
 AlidNdPtHelper.cxx:1124
 AlidNdPtHelper.cxx:1125
 AlidNdPtHelper.cxx:1126
 AlidNdPtHelper.cxx:1127
 AlidNdPtHelper.cxx:1128
 AlidNdPtHelper.cxx:1129
 AlidNdPtHelper.cxx:1130
 AlidNdPtHelper.cxx:1131
 AlidNdPtHelper.cxx:1132
 AlidNdPtHelper.cxx:1133
 AlidNdPtHelper.cxx:1134
 AlidNdPtHelper.cxx:1135
 AlidNdPtHelper.cxx:1136
 AlidNdPtHelper.cxx:1137
 AlidNdPtHelper.cxx:1138
 AlidNdPtHelper.cxx:1139
 AlidNdPtHelper.cxx:1140
 AlidNdPtHelper.cxx:1141
 AlidNdPtHelper.cxx:1142
 AlidNdPtHelper.cxx:1143
 AlidNdPtHelper.cxx:1144
 AlidNdPtHelper.cxx:1145
 AlidNdPtHelper.cxx:1146
 AlidNdPtHelper.cxx:1147
 AlidNdPtHelper.cxx:1148
 AlidNdPtHelper.cxx:1149
 AlidNdPtHelper.cxx:1150
 AlidNdPtHelper.cxx:1151
 AlidNdPtHelper.cxx:1152
 AlidNdPtHelper.cxx:1153
 AlidNdPtHelper.cxx:1154
 AlidNdPtHelper.cxx:1155
 AlidNdPtHelper.cxx:1156
 AlidNdPtHelper.cxx:1157
 AlidNdPtHelper.cxx:1158
 AlidNdPtHelper.cxx:1159
 AlidNdPtHelper.cxx:1160
 AlidNdPtHelper.cxx:1161
 AlidNdPtHelper.cxx:1162
 AlidNdPtHelper.cxx:1163
 AlidNdPtHelper.cxx:1164
 AlidNdPtHelper.cxx:1165
 AlidNdPtHelper.cxx:1166
 AlidNdPtHelper.cxx:1167
 AlidNdPtHelper.cxx:1168
 AlidNdPtHelper.cxx:1169
 AlidNdPtHelper.cxx:1170
 AlidNdPtHelper.cxx:1171
 AlidNdPtHelper.cxx:1172
 AlidNdPtHelper.cxx:1173
 AlidNdPtHelper.cxx:1174
 AlidNdPtHelper.cxx:1175
 AlidNdPtHelper.cxx:1176
 AlidNdPtHelper.cxx:1177
 AlidNdPtHelper.cxx:1178
 AlidNdPtHelper.cxx:1179
 AlidNdPtHelper.cxx:1180
 AlidNdPtHelper.cxx:1181
 AlidNdPtHelper.cxx:1182
 AlidNdPtHelper.cxx:1183
 AlidNdPtHelper.cxx:1184
 AlidNdPtHelper.cxx:1185
 AlidNdPtHelper.cxx:1186
 AlidNdPtHelper.cxx:1187
 AlidNdPtHelper.cxx:1188
 AlidNdPtHelper.cxx:1189
 AlidNdPtHelper.cxx:1190
 AlidNdPtHelper.cxx:1191
 AlidNdPtHelper.cxx:1192
 AlidNdPtHelper.cxx:1193
 AlidNdPtHelper.cxx:1194
 AlidNdPtHelper.cxx:1195
 AlidNdPtHelper.cxx:1196
 AlidNdPtHelper.cxx:1197
 AlidNdPtHelper.cxx:1198
 AlidNdPtHelper.cxx:1199
 AlidNdPtHelper.cxx:1200
 AlidNdPtHelper.cxx:1201
 AlidNdPtHelper.cxx:1202
 AlidNdPtHelper.cxx:1203
 AlidNdPtHelper.cxx:1204
 AlidNdPtHelper.cxx:1205
 AlidNdPtHelper.cxx:1206
 AlidNdPtHelper.cxx:1207
 AlidNdPtHelper.cxx:1208
 AlidNdPtHelper.cxx:1209
 AlidNdPtHelper.cxx:1210
 AlidNdPtHelper.cxx:1211
 AlidNdPtHelper.cxx:1212
 AlidNdPtHelper.cxx:1213
 AlidNdPtHelper.cxx:1214
 AlidNdPtHelper.cxx:1215
 AlidNdPtHelper.cxx:1216
 AlidNdPtHelper.cxx:1217
 AlidNdPtHelper.cxx:1218
 AlidNdPtHelper.cxx:1219
 AlidNdPtHelper.cxx:1220
 AlidNdPtHelper.cxx:1221
 AlidNdPtHelper.cxx:1222
 AlidNdPtHelper.cxx:1223
 AlidNdPtHelper.cxx:1224
 AlidNdPtHelper.cxx:1225
 AlidNdPtHelper.cxx:1226
 AlidNdPtHelper.cxx:1227
 AlidNdPtHelper.cxx:1228
 AlidNdPtHelper.cxx:1229
 AlidNdPtHelper.cxx:1230
 AlidNdPtHelper.cxx:1231
 AlidNdPtHelper.cxx:1232
 AlidNdPtHelper.cxx:1233
 AlidNdPtHelper.cxx:1234
 AlidNdPtHelper.cxx:1235
 AlidNdPtHelper.cxx:1236
 AlidNdPtHelper.cxx:1237
 AlidNdPtHelper.cxx:1238
 AlidNdPtHelper.cxx:1239
 AlidNdPtHelper.cxx:1240
 AlidNdPtHelper.cxx:1241
 AlidNdPtHelper.cxx:1242
 AlidNdPtHelper.cxx:1243
 AlidNdPtHelper.cxx:1244
 AlidNdPtHelper.cxx:1245
 AlidNdPtHelper.cxx:1246
 AlidNdPtHelper.cxx:1247
 AlidNdPtHelper.cxx:1248
 AlidNdPtHelper.cxx:1249
 AlidNdPtHelper.cxx:1250
 AlidNdPtHelper.cxx:1251
 AlidNdPtHelper.cxx:1252
 AlidNdPtHelper.cxx:1253
 AlidNdPtHelper.cxx:1254
 AlidNdPtHelper.cxx:1255
 AlidNdPtHelper.cxx:1256
 AlidNdPtHelper.cxx:1257
 AlidNdPtHelper.cxx:1258
 AlidNdPtHelper.cxx:1259
 AlidNdPtHelper.cxx:1260
 AlidNdPtHelper.cxx:1261
 AlidNdPtHelper.cxx:1262
 AlidNdPtHelper.cxx:1263
 AlidNdPtHelper.cxx:1264
 AlidNdPtHelper.cxx:1265
 AlidNdPtHelper.cxx:1266
 AlidNdPtHelper.cxx:1267
 AlidNdPtHelper.cxx:1268
 AlidNdPtHelper.cxx:1269
 AlidNdPtHelper.cxx:1270
 AlidNdPtHelper.cxx:1271
 AlidNdPtHelper.cxx:1272
 AlidNdPtHelper.cxx:1273
 AlidNdPtHelper.cxx:1274
 AlidNdPtHelper.cxx:1275
 AlidNdPtHelper.cxx:1276
 AlidNdPtHelper.cxx:1277
 AlidNdPtHelper.cxx:1278
 AlidNdPtHelper.cxx:1279
 AlidNdPtHelper.cxx:1280
 AlidNdPtHelper.cxx:1281
 AlidNdPtHelper.cxx:1282
 AlidNdPtHelper.cxx:1283
 AlidNdPtHelper.cxx:1284
 AlidNdPtHelper.cxx:1285
 AlidNdPtHelper.cxx:1286
 AlidNdPtHelper.cxx:1287
 AlidNdPtHelper.cxx:1288
 AlidNdPtHelper.cxx:1289
 AlidNdPtHelper.cxx:1290
 AlidNdPtHelper.cxx:1291
 AlidNdPtHelper.cxx:1292
 AlidNdPtHelper.cxx:1293
 AlidNdPtHelper.cxx:1294
 AlidNdPtHelper.cxx:1295
 AlidNdPtHelper.cxx:1296
 AlidNdPtHelper.cxx:1297
 AlidNdPtHelper.cxx:1298
 AlidNdPtHelper.cxx:1299
 AlidNdPtHelper.cxx:1300
 AlidNdPtHelper.cxx:1301
 AlidNdPtHelper.cxx:1302
 AlidNdPtHelper.cxx:1303
 AlidNdPtHelper.cxx:1304
 AlidNdPtHelper.cxx:1305
 AlidNdPtHelper.cxx:1306
 AlidNdPtHelper.cxx:1307
 AlidNdPtHelper.cxx:1308
 AlidNdPtHelper.cxx:1309
 AlidNdPtHelper.cxx:1310
 AlidNdPtHelper.cxx:1311
 AlidNdPtHelper.cxx:1312
 AlidNdPtHelper.cxx:1313
 AlidNdPtHelper.cxx:1314
 AlidNdPtHelper.cxx:1315
 AlidNdPtHelper.cxx:1316
 AlidNdPtHelper.cxx:1317
 AlidNdPtHelper.cxx:1318
 AlidNdPtHelper.cxx:1319
 AlidNdPtHelper.cxx:1320
 AlidNdPtHelper.cxx:1321
 AlidNdPtHelper.cxx:1322
 AlidNdPtHelper.cxx:1323
 AlidNdPtHelper.cxx:1324
 AlidNdPtHelper.cxx:1325
 AlidNdPtHelper.cxx:1326
 AlidNdPtHelper.cxx:1327
 AlidNdPtHelper.cxx:1328
 AlidNdPtHelper.cxx:1329
 AlidNdPtHelper.cxx:1330
 AlidNdPtHelper.cxx:1331
 AlidNdPtHelper.cxx:1332
 AlidNdPtHelper.cxx:1333
 AlidNdPtHelper.cxx:1334
 AlidNdPtHelper.cxx:1335
 AlidNdPtHelper.cxx:1336
 AlidNdPtHelper.cxx:1337
 AlidNdPtHelper.cxx:1338
 AlidNdPtHelper.cxx:1339
 AlidNdPtHelper.cxx:1340
 AlidNdPtHelper.cxx:1341
 AlidNdPtHelper.cxx:1342
 AlidNdPtHelper.cxx:1343
 AlidNdPtHelper.cxx:1344
 AlidNdPtHelper.cxx:1345
 AlidNdPtHelper.cxx:1346
 AlidNdPtHelper.cxx:1347
 AlidNdPtHelper.cxx:1348
 AlidNdPtHelper.cxx:1349
 AlidNdPtHelper.cxx:1350
 AlidNdPtHelper.cxx:1351
 AlidNdPtHelper.cxx:1352
 AlidNdPtHelper.cxx:1353
 AlidNdPtHelper.cxx:1354
 AlidNdPtHelper.cxx:1355
 AlidNdPtHelper.cxx:1356
 AlidNdPtHelper.cxx:1357
 AlidNdPtHelper.cxx:1358
 AlidNdPtHelper.cxx:1359
 AlidNdPtHelper.cxx:1360
 AlidNdPtHelper.cxx:1361
 AlidNdPtHelper.cxx:1362
 AlidNdPtHelper.cxx:1363
 AlidNdPtHelper.cxx:1364
 AlidNdPtHelper.cxx:1365
 AlidNdPtHelper.cxx:1366
 AlidNdPtHelper.cxx:1367
 AlidNdPtHelper.cxx:1368
 AlidNdPtHelper.cxx:1369
 AlidNdPtHelper.cxx:1370
 AlidNdPtHelper.cxx:1371
 AlidNdPtHelper.cxx:1372
 AlidNdPtHelper.cxx:1373
 AlidNdPtHelper.cxx:1374
 AlidNdPtHelper.cxx:1375
 AlidNdPtHelper.cxx:1376
 AlidNdPtHelper.cxx:1377
 AlidNdPtHelper.cxx:1378
 AlidNdPtHelper.cxx:1379
 AlidNdPtHelper.cxx:1380
 AlidNdPtHelper.cxx:1381
 AlidNdPtHelper.cxx:1382
 AlidNdPtHelper.cxx:1383
 AlidNdPtHelper.cxx:1384
 AlidNdPtHelper.cxx:1385
 AlidNdPtHelper.cxx:1386
 AlidNdPtHelper.cxx:1387
 AlidNdPtHelper.cxx:1388
 AlidNdPtHelper.cxx:1389
 AlidNdPtHelper.cxx:1390
 AlidNdPtHelper.cxx:1391
 AlidNdPtHelper.cxx:1392
 AlidNdPtHelper.cxx:1393
 AlidNdPtHelper.cxx:1394
 AlidNdPtHelper.cxx:1395
 AlidNdPtHelper.cxx:1396
 AlidNdPtHelper.cxx:1397
 AlidNdPtHelper.cxx:1398
 AlidNdPtHelper.cxx:1399
 AlidNdPtHelper.cxx:1400
 AlidNdPtHelper.cxx:1401
 AlidNdPtHelper.cxx:1402
 AlidNdPtHelper.cxx:1403
 AlidNdPtHelper.cxx:1404
 AlidNdPtHelper.cxx:1405
 AlidNdPtHelper.cxx:1406
 AlidNdPtHelper.cxx:1407
 AlidNdPtHelper.cxx:1408
 AlidNdPtHelper.cxx:1409
 AlidNdPtHelper.cxx:1410
 AlidNdPtHelper.cxx:1411
 AlidNdPtHelper.cxx:1412
 AlidNdPtHelper.cxx:1413
 AlidNdPtHelper.cxx:1414
 AlidNdPtHelper.cxx:1415
 AlidNdPtHelper.cxx:1416
 AlidNdPtHelper.cxx:1417
 AlidNdPtHelper.cxx:1418
 AlidNdPtHelper.cxx:1419
 AlidNdPtHelper.cxx:1420
 AlidNdPtHelper.cxx:1421
 AlidNdPtHelper.cxx:1422
 AlidNdPtHelper.cxx:1423
 AlidNdPtHelper.cxx:1424
 AlidNdPtHelper.cxx:1425
 AlidNdPtHelper.cxx:1426
 AlidNdPtHelper.cxx:1427
 AlidNdPtHelper.cxx:1428
 AlidNdPtHelper.cxx:1429
 AlidNdPtHelper.cxx:1430
 AlidNdPtHelper.cxx:1431
 AlidNdPtHelper.cxx:1432
 AlidNdPtHelper.cxx:1433
 AlidNdPtHelper.cxx:1434
 AlidNdPtHelper.cxx:1435
 AlidNdPtHelper.cxx:1436
 AlidNdPtHelper.cxx:1437
 AlidNdPtHelper.cxx:1438
 AlidNdPtHelper.cxx:1439
 AlidNdPtHelper.cxx:1440
 AlidNdPtHelper.cxx:1441
 AlidNdPtHelper.cxx:1442
 AlidNdPtHelper.cxx:1443
 AlidNdPtHelper.cxx:1444
 AlidNdPtHelper.cxx:1445
 AlidNdPtHelper.cxx:1446
 AlidNdPtHelper.cxx:1447
 AlidNdPtHelper.cxx:1448
 AlidNdPtHelper.cxx:1449
 AlidNdPtHelper.cxx:1450
 AlidNdPtHelper.cxx:1451
 AlidNdPtHelper.cxx:1452
 AlidNdPtHelper.cxx:1453
 AlidNdPtHelper.cxx:1454
 AlidNdPtHelper.cxx:1455
 AlidNdPtHelper.cxx:1456
 AlidNdPtHelper.cxx:1457
 AlidNdPtHelper.cxx:1458
 AlidNdPtHelper.cxx:1459
 AlidNdPtHelper.cxx:1460
 AlidNdPtHelper.cxx:1461
 AlidNdPtHelper.cxx:1462
 AlidNdPtHelper.cxx:1463
 AlidNdPtHelper.cxx:1464
 AlidNdPtHelper.cxx:1465
 AlidNdPtHelper.cxx:1466
 AlidNdPtHelper.cxx:1467
 AlidNdPtHelper.cxx:1468
 AlidNdPtHelper.cxx:1469
 AlidNdPtHelper.cxx:1470
 AlidNdPtHelper.cxx:1471
 AlidNdPtHelper.cxx:1472
 AlidNdPtHelper.cxx:1473
 AlidNdPtHelper.cxx:1474
 AlidNdPtHelper.cxx:1475
 AlidNdPtHelper.cxx:1476
 AlidNdPtHelper.cxx:1477
 AlidNdPtHelper.cxx:1478
 AlidNdPtHelper.cxx:1479
 AlidNdPtHelper.cxx:1480
 AlidNdPtHelper.cxx:1481
 AlidNdPtHelper.cxx:1482
 AlidNdPtHelper.cxx:1483
 AlidNdPtHelper.cxx:1484
 AlidNdPtHelper.cxx:1485
 AlidNdPtHelper.cxx:1486
 AlidNdPtHelper.cxx:1487
 AlidNdPtHelper.cxx:1488
 AlidNdPtHelper.cxx:1489
 AlidNdPtHelper.cxx:1490
 AlidNdPtHelper.cxx:1491
 AlidNdPtHelper.cxx:1492
 AlidNdPtHelper.cxx:1493
 AlidNdPtHelper.cxx:1494
 AlidNdPtHelper.cxx:1495
 AlidNdPtHelper.cxx:1496
 AlidNdPtHelper.cxx:1497
 AlidNdPtHelper.cxx:1498
 AlidNdPtHelper.cxx:1499
 AlidNdPtHelper.cxx:1500
 AlidNdPtHelper.cxx:1501
 AlidNdPtHelper.cxx:1502
 AlidNdPtHelper.cxx:1503
 AlidNdPtHelper.cxx:1504
 AlidNdPtHelper.cxx:1505
 AlidNdPtHelper.cxx:1506
 AlidNdPtHelper.cxx:1507
 AlidNdPtHelper.cxx:1508
 AlidNdPtHelper.cxx:1509
 AlidNdPtHelper.cxx:1510
 AlidNdPtHelper.cxx:1511
 AlidNdPtHelper.cxx:1512
 AlidNdPtHelper.cxx:1513
 AlidNdPtHelper.cxx:1514
 AlidNdPtHelper.cxx:1515
 AlidNdPtHelper.cxx:1516
 AlidNdPtHelper.cxx:1517
 AlidNdPtHelper.cxx:1518
 AlidNdPtHelper.cxx:1519
 AlidNdPtHelper.cxx:1520
 AlidNdPtHelper.cxx:1521
 AlidNdPtHelper.cxx:1522
 AlidNdPtHelper.cxx:1523
 AlidNdPtHelper.cxx:1524
 AlidNdPtHelper.cxx:1525
 AlidNdPtHelper.cxx:1526
 AlidNdPtHelper.cxx:1527
 AlidNdPtHelper.cxx:1528
 AlidNdPtHelper.cxx:1529
 AlidNdPtHelper.cxx:1530
 AlidNdPtHelper.cxx:1531
 AlidNdPtHelper.cxx:1532
 AlidNdPtHelper.cxx:1533
 AlidNdPtHelper.cxx:1534
 AlidNdPtHelper.cxx:1535
 AlidNdPtHelper.cxx:1536
 AlidNdPtHelper.cxx:1537
 AlidNdPtHelper.cxx:1538
 AlidNdPtHelper.cxx:1539
 AlidNdPtHelper.cxx:1540
 AlidNdPtHelper.cxx:1541
 AlidNdPtHelper.cxx:1542
 AlidNdPtHelper.cxx:1543
 AlidNdPtHelper.cxx:1544
 AlidNdPtHelper.cxx:1545
 AlidNdPtHelper.cxx:1546
 AlidNdPtHelper.cxx:1547
 AlidNdPtHelper.cxx:1548
 AlidNdPtHelper.cxx:1549
 AlidNdPtHelper.cxx:1550
 AlidNdPtHelper.cxx:1551
 AlidNdPtHelper.cxx:1552
 AlidNdPtHelper.cxx:1553
 AlidNdPtHelper.cxx:1554
 AlidNdPtHelper.cxx:1555
 AlidNdPtHelper.cxx:1556
 AlidNdPtHelper.cxx:1557
 AlidNdPtHelper.cxx:1558
 AlidNdPtHelper.cxx:1559
 AlidNdPtHelper.cxx:1560
 AlidNdPtHelper.cxx:1561
 AlidNdPtHelper.cxx:1562
 AlidNdPtHelper.cxx:1563
 AlidNdPtHelper.cxx:1564
 AlidNdPtHelper.cxx:1565
 AlidNdPtHelper.cxx:1566
 AlidNdPtHelper.cxx:1567
 AlidNdPtHelper.cxx:1568
 AlidNdPtHelper.cxx:1569
 AlidNdPtHelper.cxx:1570
 AlidNdPtHelper.cxx:1571
 AlidNdPtHelper.cxx:1572
 AlidNdPtHelper.cxx:1573
 AlidNdPtHelper.cxx:1574
 AlidNdPtHelper.cxx:1575
 AlidNdPtHelper.cxx:1576
 AlidNdPtHelper.cxx:1577
 AlidNdPtHelper.cxx:1578
 AlidNdPtHelper.cxx:1579
 AlidNdPtHelper.cxx:1580
 AlidNdPtHelper.cxx:1581
 AlidNdPtHelper.cxx:1582
 AlidNdPtHelper.cxx:1583
 AlidNdPtHelper.cxx:1584
 AlidNdPtHelper.cxx:1585
 AlidNdPtHelper.cxx:1586
 AlidNdPtHelper.cxx:1587
 AlidNdPtHelper.cxx:1588
 AlidNdPtHelper.cxx:1589
 AlidNdPtHelper.cxx:1590
 AlidNdPtHelper.cxx:1591
 AlidNdPtHelper.cxx:1592
 AlidNdPtHelper.cxx:1593
 AlidNdPtHelper.cxx:1594
 AlidNdPtHelper.cxx:1595
 AlidNdPtHelper.cxx:1596
 AlidNdPtHelper.cxx:1597
 AlidNdPtHelper.cxx:1598
 AlidNdPtHelper.cxx:1599
 AlidNdPtHelper.cxx:1600
 AlidNdPtHelper.cxx:1601
 AlidNdPtHelper.cxx:1602
 AlidNdPtHelper.cxx:1603
 AlidNdPtHelper.cxx:1604
 AlidNdPtHelper.cxx:1605
 AlidNdPtHelper.cxx:1606
 AlidNdPtHelper.cxx:1607
 AlidNdPtHelper.cxx:1608
 AlidNdPtHelper.cxx:1609
 AlidNdPtHelper.cxx:1610
 AlidNdPtHelper.cxx:1611
 AlidNdPtHelper.cxx:1612
 AlidNdPtHelper.cxx:1613
 AlidNdPtHelper.cxx:1614
 AlidNdPtHelper.cxx:1615
 AlidNdPtHelper.cxx:1616
 AlidNdPtHelper.cxx:1617
 AlidNdPtHelper.cxx:1618
 AlidNdPtHelper.cxx:1619
 AlidNdPtHelper.cxx:1620
 AlidNdPtHelper.cxx:1621
 AlidNdPtHelper.cxx:1622
 AlidNdPtHelper.cxx:1623
 AlidNdPtHelper.cxx:1624
 AlidNdPtHelper.cxx:1625
 AlidNdPtHelper.cxx:1626
 AlidNdPtHelper.cxx:1627
 AlidNdPtHelper.cxx:1628
 AlidNdPtHelper.cxx:1629
 AlidNdPtHelper.cxx:1630
 AlidNdPtHelper.cxx:1631
 AlidNdPtHelper.cxx:1632
 AlidNdPtHelper.cxx:1633
 AlidNdPtHelper.cxx:1634
 AlidNdPtHelper.cxx:1635
 AlidNdPtHelper.cxx:1636
 AlidNdPtHelper.cxx:1637
 AlidNdPtHelper.cxx:1638
 AlidNdPtHelper.cxx:1639
 AlidNdPtHelper.cxx:1640
 AlidNdPtHelper.cxx:1641
 AlidNdPtHelper.cxx:1642
 AlidNdPtHelper.cxx:1643
 AlidNdPtHelper.cxx:1644
 AlidNdPtHelper.cxx:1645
 AlidNdPtHelper.cxx:1646
 AlidNdPtHelper.cxx:1647
 AlidNdPtHelper.cxx:1648
 AlidNdPtHelper.cxx:1649
 AlidNdPtHelper.cxx:1650
 AlidNdPtHelper.cxx:1651
 AlidNdPtHelper.cxx:1652
 AlidNdPtHelper.cxx:1653
 AlidNdPtHelper.cxx:1654
 AlidNdPtHelper.cxx:1655
 AlidNdPtHelper.cxx:1656
 AlidNdPtHelper.cxx:1657
 AlidNdPtHelper.cxx:1658
 AlidNdPtHelper.cxx:1659
 AlidNdPtHelper.cxx:1660
 AlidNdPtHelper.cxx:1661
 AlidNdPtHelper.cxx:1662
 AlidNdPtHelper.cxx:1663
 AlidNdPtHelper.cxx:1664
 AlidNdPtHelper.cxx:1665
 AlidNdPtHelper.cxx:1666
 AlidNdPtHelper.cxx:1667
 AlidNdPtHelper.cxx:1668
 AlidNdPtHelper.cxx:1669
 AlidNdPtHelper.cxx:1670
 AlidNdPtHelper.cxx:1671
 AlidNdPtHelper.cxx:1672
 AlidNdPtHelper.cxx:1673
 AlidNdPtHelper.cxx:1674
 AlidNdPtHelper.cxx:1675
 AlidNdPtHelper.cxx:1676
 AlidNdPtHelper.cxx:1677
 AlidNdPtHelper.cxx:1678
 AlidNdPtHelper.cxx:1679
 AlidNdPtHelper.cxx:1680
 AlidNdPtHelper.cxx:1681
 AlidNdPtHelper.cxx:1682
 AlidNdPtHelper.cxx:1683
 AlidNdPtHelper.cxx:1684
 AlidNdPtHelper.cxx:1685
 AlidNdPtHelper.cxx:1686
 AlidNdPtHelper.cxx:1687
 AlidNdPtHelper.cxx:1688
 AlidNdPtHelper.cxx:1689
 AlidNdPtHelper.cxx:1690
 AlidNdPtHelper.cxx:1691
 AlidNdPtHelper.cxx:1692
 AlidNdPtHelper.cxx:1693
 AlidNdPtHelper.cxx:1694
 AlidNdPtHelper.cxx:1695
 AlidNdPtHelper.cxx:1696
 AlidNdPtHelper.cxx:1697
 AlidNdPtHelper.cxx:1698
 AlidNdPtHelper.cxx:1699
 AlidNdPtHelper.cxx:1700
 AlidNdPtHelper.cxx:1701
 AlidNdPtHelper.cxx:1702