CTrackingStrategy.C
//-----------------------------------------------------------------------------
// $Header: /asis/offline/ceres/cool/project/RCS/CTrackingStrategy.C,v 3.0 1996/10/02 09:39:53 voigt Exp $
//
// COOL Program Library
// Copyright (C) CERES collaboration, 1996
//
// Implementation of template class CTrackingStrategy.
//
//-----------------------------------------------------------------------------
#include <math.h>
#include "CTrackingStrategy.h"
CTrackingStrategy::CTrackingStrategy(const char* file)
{
//
// Create and read tracking setup
//
setup = new CTrackingSetup;
if (file == 0) {
CString setupName = CString(C_DEFAULT_SETUP_PATH)+
CString(C_SETUPFILE_TRACKING);
setup->read(setupName.data());
}
else
setup->read(file);
}
double CTrackingStrategy::richButterfly(double p)
{
//
// Returns the one sigma fluctuation in theta due
// to ring center resolution in RICH1+2 and multiple
// scattering. Units are mrad.
//
double ringResolution2 = setup->getRich1CenterResolution() *
setup->getRich1CenterResolution() +
setup->getRich2CenterResolution() *
setup->getRich2CenterResolution();
double multScatter2 = setup->getMultipleScattering() *
setup->getMultipleScattering();
return sqrt(ringResolution2 + multScatter2 / (p*p));
}
double CTrackingStrategy::padChamberButterfly(double p)
{
//
// Returns the one sigma fluctuation in theta due
// to hit resolution in the tracking detectors and multiple
// scattering. Units are mrad.
//
double ringResolution2 = setup->getSidcTrackResolution() *
setup->getSidcTrackResolution() +
setup->getPadcHitResolution() *
setup->getPadcHitResolution();
double multScatter2 = setup->getMultipleScattering() *
setup->getMultipleScattering();
return sqrt(ringResolution2 + multScatter2 / (p*p));
}
double CTrackingStrategy::phiDeflectionAt1GeV(double theta)
{
//
// Returns phi deflection for 1 GeV vs. theta (mrad)
//
return (setup->getPhiDeflectionParameters(0) +
setup->getPhiDeflectionParameters(1) * theta +
setup->getPhiDeflectionParameters(2) * theta * theta);
}
double CTrackingStrategy::secondOrderFieldEffect(double theta, double dphi)
{
//
// Second-order deflection in mrad vs. theta (mrad) and phi-deflection (rad)
//
return dphi*dphi * (setup->getFieldEffectParameters(0) +
setup->getFieldEffectParameters(1) * theta +
setup->getFieldEffectParameters(2) * theta * theta);
}
void CTrackingStrategy::listSetup(ostream& ost) const
{
ost << "\nSetup listing of tracking strategy" << endl;
CString line('=', 46);
ost << line << endl;
setup->list(ost);
}