// @(#) $Id$ // Original: AliHLTVertexArray.cxx,v 1.7 2005/06/14 10:55:21 cvetan // Author: Uli Frankenfeld //*-- Copyright © ALICE HLT Group #include "AliHLTTPCLogging.h" #include "AliHLTTPCVertexArray.h" /** \class AliHLTTPCVertexArray
//_____________________________________________________________
// AliHLTTPCVertexArray
//
// The HLTTPC Fast Vertex Finder Base Class
//
// usage:
//
//for(Int_t sec=0;sec
*/

#if __GNUC__ >= 3
using namespace std;
#endif

ClassImp(AliHLTTPCVertexArray)

AliHLTTPCVertexArray::AliHLTTPCVertexArray()
  :
  fZSector(0),
  fZSectorErr(0),
  fMaxSeed(400),
  fNSeed(0)
{
}

AliHLTTPCVertexArray::AliHLTTPCVertexArray(AliHLTTPCVertexArray&)
  :
  fZSector(0),
  fZSectorErr(0),
  fMaxSeed(400),
  fNSeed(0)
{
}

AliHLTTPCVertexArray::AliHLTTPCVertexArray(Int_t maxseed)
  :
  fZSector(0),
  fZSectorErr(0),
  fMaxSeed(maxseed),
  fNSeed(0)
{
}

AliHLTTPCVertexArray::~AliHLTTPCVertexArray()
{
}

void AliHLTTPCVertexArray::AnalyzeSector(Float_t *vertex, Int_t *array, Int_t len)
{
  //loop over all seeds and all vertex position
  LOG(AliHLTTPCLog::kInformational,"AliHLTTPCVertexArray::AnalyzeSector","Analyze")
  <max){
      max = array[i];
      xbin =i;
    }
  }
  Int_t hmax = max/2;
  Int_t xmin,xmax;
  Int_t ops = 0;
  xmin = xbin;
  while(xmin--){
    if(xmin<0) {ops++;break;}
    if(array[xmin]=knbin) {ops++;break;}
    if(array[xmax]= knbin/2){xmin = 2 * xbin - knbin +1;xmax = knbin-1;}
    else{xmin = 0;xmax = 2 * xbin;}
  }
  Double_t sumw=0;
  Double_t sumw2=0;
  Double_t sumwx=0;
  Double_t sumwx2=0;
  for(Int_t bin = xmin;bin<=xmax;bin++){
    sumw   += array[bin];
    sumw2  += array[bin] * array[bin]; 
    sumwx  += array[bin] * vertex[bin];
    sumwx2 += array[bin] * vertex[bin] * vertex[bin];
  }
  if(sumw){
    Double_t mean = sumwx/sumw;
    Double_t rms2 = fabs(sumwx2/sumw - mean*mean);
    fZSectorErr = sqrt(rms2/sumw);
    fZSector = mean;
  }
  else{fZSectorErr = fZSector = 0;}
  sumw=sumw2=sumwx=sumwx2=0;
  for(Int_t bin = 0;bin