////////////////////////////////////////////////////////////////////////
//
// $Id: CandFitTrackSA.cxx,v 1.9 2006/02/04 07:14:12 avva Exp $
//
// CandFitTrackSA
//
// Package: CandFitTrackSA
//
// Candidate track, fit with an iterative least squares method
//
// Contact: avva@fnal.gov
//
// Created on: Thu May 22 16:33:50 CDT 2003
// (generated by avva@unknown with rkp_init_cand.pl)
//
////////////////////////////////////////////////////////////////////////

#include "Algorithm/AlgHandle.h"
#include "MessageService/MsgService.h"

#include "CandFitTrackSA/CandFitTrackSA.h"
#include "CandFitTrackSA/CandFitTrackSAHandle.h"
#include "CandFitTrackSA/TracerSA.h"

CVSID("$Id: CandFitTrackSA.cxx,v 1.9 2006/02/04 07:14:12 avva Exp $");

ClassImp(CandFitTrackSA)

CandFitTrackSA::CandFitTrackSA () :
    fFits("NtpFitSA", 50)
{
}

CandFitTrackSA::CandFitTrackSA(AlgHandle& ah) :
    CandFitTrack(ah) ,
    fFits("NtpFitSA", 50)
{
}

CandFitTrackSA::CandFitTrackSA(AlgHandle& ah, CandHandle& ch, CandContext& cx) :
    CandFitTrack(ah) ,
    fFits("NtpFitSA", 50)
{
    TracerSA trace(
        "CandFitTrackSA::CandFitTrackSA(AlgHandle& ,CandHandle& , CandContext&)"
    );
    this->CreateLocalHandle();
    {
        CandFitTrackSAHandle a_handle(this);
        ch = a_handle;
    }
    ah.RunAlg(ch,cx);
}

CandFitTrackSA::CandFitTrackSA(const CandFitTrackSA& rhs) :
    CandFitTrack(rhs) ,
    fFits("NtpFitSA", 50)    
{
    NtpFitSA* ntpfitsa;
    for (Int_t i = 0; i < rhs.fFits.GetEntriesFast(); i++) {
        ntpfitsa = new((fFits)[i]) NtpFitSA(*(NtpFitSA*) rhs.fFits[i]);
    }
}

CandFitTrackSA::~CandFitTrackSA()
{
    fFits.Delete();
}

void CandFitTrackSA::CreateLocalHandle()
{
    this->SetLocalHandle(new CandFitTrackSAHandle(this));
}

CandFitTrackSA* CandFitTrackSA::Dup() const
{
    CandFitTrackSA* newone = new CandFitTrackSA(*this);
    newone->CreateLocalHandle();
    TIter iter = this->GetDaughterIterator();
    CandHandle* ch;
    while ((ch=(CandHandle*)iter())) newone->AddDaughterLink(*ch);
    return newone;
}

CandFitTrackSAHandle CandFitTrackSA::MakeCandidate(AlgHandle& ah, CandContext& cx)
{
    CandFitTrackSAHandle a_handle;
    new CandFitTrackSA(ah,a_handle,cx);
    return a_handle;
}

