Back to index

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); 
} 

Back to index