// $Id: StFtpcTracker.cc,v 1.4 2000/05/15 14:28:13 oldi Exp $
// $Log: StFtpcTracker.cc,v $
// Revision 1.4 2000/05/15 14:28:13 oldi
// problem of preVertex solved: if no main vertex is found (z = NaN) StFtpcTrackMaker stops with kStWarn,
// refitting procedure completed and included in StFtpcTrackMaker (commented),
// new constructor of StFtpcVertex due to refitting procedure,
// minor cosmetic changes
//
// Revision 1.3 2000/05/12 12:59:17 oldi
// removed delete operator for mSegment in StFtpcConfMapper (mSegment was deleted twice),
// add two new constructors for StFtpcTracker to be able to refit already existing tracks,
// minor cosmetics
//
// Revision 1.2 2000/05/11 15:14:53 oldi
// Changed class names *Hit.* due to already existing class StFtpcHit.cxx in StEvent
//
// Revision 1.1 2000/05/10 13:39:31 oldi
// Initial version of StFtpcTrackMaker
//
//----------Author: Holm G. Hümmler, Markus D. Oldenburg
//----------Last Modified: 12.05.2000
//----------Copyright: © MDO Production 1999
#include "StFtpcTracker.hh"
#include "StFtpcPoint.hh"
#include "StFtpcTrack.hh"
///////////////////////////////////////////////////////////////////////////////////
// //
// StFtpcTracker class - interface class for the different Ftpc track algorithms //
// //
// This class contains the pointers needed to do tracking in the Ftpc i.e. a //
// pointer to the vertex, pointers to clusters and tracks. //
// //
///////////////////////////////////////////////////////////////////////////////////
ClassImp(StFtpcTracker)
StFtpcTracker::StFtpcTracker()
{
// Default constructor.
// Sets the pointers to 0 an cut for momnetum fit loosely.
mVertex = 0;
mHit = 0;
mTrack = 0;
mHitsCreated = (Bool_t)false;
mVertexCreated = (Bool_t)false;
mMaxDca = 100.;
}
StFtpcTracker::StFtpcTracker(St_fcl_fppoint *fcl_fppoint, Double_t vertexPos[3], Double_t max_Dca)
{
// Usual used constructor.
// Sets up the pointers and the cut value for the momentum fit.
mHitsCreated = (Bool_t)false;
mMaxDca = max_Dca;
mTrack = new TClonesArray("StFtpcTrack", 0);
Int_t n_clusters = fcl_fppoint->GetNRows(); // number of clusters
fcl_fppoint_st *point_st = fcl_fppoint->GetTable(); // pointer to first cluster structure
if(vertexPos == NULL) {
mVertex = new StFtpcVertex(point_st, n_clusters);
}
else {
mVertex = new StFtpcVertex(vertexPos);
}
mVertexCreated = (Bool_t)true;
}
StFtpcTracker::StFtpcTracker(StFtpcVertex *vertex, TClonesArray *hit, TClonesArray *track, Double_t dca)
{
// Constructor to handle the case where everything is there already.
mVertex = vertex;
mHit = hit;
mHitsCreated = (Bool_t) false;
mVertexCreated = (Bool_t) false;
mTrack = track;
mMaxDca = dca;
}
StFtpcTracker::StFtpcTracker(StFtpcVertex *vertex, St_fcl_fppoint *fcl_fppoint, St_fpt_fptrack *fpt_fptrack, Double_t dca)
{
// Constructor to handle the case where everything is there already but only in StAF tables.
mVertex = vertex;
mVertexCreated = (Bool_t)false;
// Copy clusters into ClonesArray.
Int_t n_clusters = fcl_fppoint->GetNRows(); // number of clusters
fcl_fppoint_st *point_st = fcl_fppoint->GetTable(); // pointer to first cluster structure
mHit = new TClonesArray("StFtpcPoint", n_clusters); // create TClonesArray
mHitsCreated = (Bool_t)true;
TClonesArray &hit = *mHit;
for (Int_t i = 0; i < n_clusters; i++) {
new(hit[i]) StFtpcPoint(point_st++);
((StFtpcPoint *)mHit->At(i))->SetHitNumber(i);
}
// Copy tracks into ClonesArray.
Int_t n_tracks = fpt_fptrack->GetNRows(); // number of tracks
fpt_fptrack_st *track_st = fpt_fptrack->GetTable(); // pointer to first track structure
mTrack = new TClonesArray("StFtpcTrack", n_tracks); // create TClonesArray
TClonesArray &track = *mTrack;
for (Int_t i = 0; i < n_tracks; i++) {
new(track[i]) StFtpcTrack(track_st++, mHit);
}
mMaxDca = dca;
}
StFtpcTracker::~StFtpcTracker()
{
// Destructor.
if (mTrack) {
mTrack->Delete();
delete mTrack;
}
if (mHitsCreated) {
mHit->Delete();
delete mHit;
}
if (mVertex && mVertexCreated) {
delete mVertex;
}
return;
}
Int_t StFtpcTracker::FitAndWrite(St_fpt_fptrack *trackTableWrapper)
{
// Writes tracks to STAF table.
fpt_fptrack_st *trackTable= trackTableWrapper->GetTable();
if (mTrack) {
Int_t num_tracks = mTrack->GetEntriesFast();
if(num_tracks > trackTableWrapper->GetTableSize()) {
num_tracks = trackTableWrapper->GetTableSize();
}
StFtpcTrack *track;
for (Int_t i=0; i<num_tracks; i++) {
track = (StFtpcTrack *)mTrack->At(i);
track->Fit(mVertex, mMaxDca);
track->Write(&(trackTable[i]));
}
trackTableWrapper->SetNRows(num_tracks);
cout << "Writing " << num_tracks << " tracks." << endl;
return 0;
}
else {
cout << "Tracks not written (No tracks found!)." << endl;
return -1;
}
}
Int_t StFtpcTracker::Write()
{
// Writes tracks and clusters in ROOT file.
// In the moment this makes no sense because the important information
// about momentum of tracks and coordinates of clusters or stored in
// StThreeVerctor<double> which does not inherit from TObject. So it
// is not written out!
mHit->Write();
mTrack->Write();
return 0;
}
ROOT page - Home page - Class index - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.