class THaOptics: public THaAnalysisObject


    THaOptics

  Read in track X,Y,Theta,Phi in TRCS and fill in any thing else in THaTrack



 Author: Jin Huang <mailto:jinhuang@jlab.org>    Jan 2008
    Modify History:
      Mar 2007    Jin Huang <mailto:jinhuang@jlab.org>
          Modify ApplyOptics to give a central trajectory





THIS IS an abstract class basis for general optics class.
It has following functions:
> handles general optics interface
> managing beam information
> supporting coordinate transformation (see child class TOpticsDir and TOpticsPos).
> supporting some geometry calculation such as CrossingSurfLine3D(...)



TERMINOLOGY used in this class follows conventions of Hall A
Tech Notes JLAB-TN-02-012:
http://hallaweb.jlab.org/publications/Technotes/files/2002/02-012.pdf



DERIVED CLASS should reload function of virtual Int_t ApplyOptics(...).



FOUR DERIVED OPTICS CLASS have been implemented, each with difference algorithm,
but using same interface defined by this class. They are THaOpticsAnalytical,
THaOpticsHRS, THaOpticsNoFeild and THaOpticsAGen.



USAGE: to make a spectrometer support this series of optics classes,
following code have to be included:

0.#include "THaOptics.h"

1.in class definition:
public:
virtual Bool_t   MountOptics(THaOptics *);
protected:
TRef            fOptics;  //pointer to optics calculation class
public:
inline THaOptics *  GetOptics() const
{return (THaOptics *)(fOptics.GetObject());}

2.in destructor:
if (fOptics.IsValid()) delete (THaOptics *)(fOptics.GetObject());

3.anywhere in spectrometer.cxx:
Bool_t THaBigBite::MountOptics(THaOptics *Optics)
{
mount a optics class to the Spectrometer.
return true if successful.
Notice: This function have to be called
before Init() to make sure readdatebase
        is called for the optics class.

if (fOptics.IsValid()) {
DEBUG_WARNING("MountOptics",
"The Optics has already been mounted. Deleting the old one and mounting new.");
delete fOptics.GetObject();
}

fOptics=Optics;

return fOptics.IsValid();
}

4.reload THaSpectrometer::FindVertices(TClonesArray& tracks ) and add:
if (fOptics.IsValid())
{
Int_t n_exist = tracks.GetLast()+1;

for( Int_t t = 0; t < n_exist; t++ ) {
THaTrack* theTrack = static_cast<THaTrack*>( tracks.At(t) );
assert(fOptics.IsValid());
((THaOptics *)(fOptics.GetObject()))-> ApplyOptics (theTrack);
}
}

5.reload THaSpectrometer::Init( const TDatime& run_time ) and add:
THaAnalysisObject::EStatus stat=THaSpectrometer::Init(run_time);
if (stat!=kOK) return stat;

Optics is the last one to be initialized.
So it could use any other variable
if (fOptics.IsValid())
stat=((THaOptics *)(fOptics.GetObject()))->Init(run_time);

6.(optional)in constructor:
Bool_t mr=MountOptics(new <the optics class name>(<name>,<description>,this));

7.(optional)in the code, one can always reassign a difference optics
class to the spectrometer by calling MountOptics(THaOptics *);




Child Class THaOptics::TOpticsDir

a vector class with information of it's Coordinate System
also handles Coordinate transformation. But it only handle
rotation of the vector. It's useful to describe a direction
For example, p vector




Child Class THaOptics::TOpticsPos

a vector class derived from THaOptics::TOpticsDir, specially designed
for position coordinate, ex vertex.


Function Members (Methods)

public:
THaOptics(const char* name, const char* desc, THaSpectrometer* pspec, TString strBeamDetectorName = "")
virtual~THaOptics()
voidTObject::AbstractMethod(const char* method) const
virtual voidTObject::AppendPad(Option_t* option = "")
virtual Int_tApplyCorrection(Double_t& Th, Double_t& Ph, Double_t& P, Double_t& PathLen)
virtual Int_tApplyOptics(THaTrack* track)
virtual Int_tApplyOptics(THaTrack* track, TVector3 beampos, TVector3 beamdir)
virtual Int_tApplyOptics(Double_t trackX, Double_t trackY, Double_t trackTheta, Double_t trackPhi, TVector3 beamPos, TVector3 beamDir, TVector3& P, TVector3& Vertex, Double_t& TargetX, Double_t& TargetY, Double_t& TargetTheta, Double_t& TargetPhi, Double_t& PathLen)
virtual Int_tTHaAnalysisObject::Begin(THaRunBase* r = 0)
virtual voidTObject::Browse(TBrowser* b)
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidClear(Option_t* opt = "")
virtual TObject*TNamed::Clone(const char* newname = "") const
virtual Int_tTNamed::Compare(const TObject* obj) const
virtual voidTNamed::Copy(TObject& named) const
TVector2CrossingLineLine2D(TVector2 o1, TVector2 d1, TVector2 o2, TVector2 d2)
TVector3CrossingSurfLine3D(TVector3 OSurf, TVector3 NSurf, TVector3 OLine, TVector3 DLine)
static Int_tTHaAnalysisObject::DefineVarsFromList(const void* list, THaAnalysisObject::EType type, THaAnalysisObject::EMode mode, const char* var_prefix, const TObject* obj, const char* prefix, const char* here)
virtual voidTObject::Delete(Option_t* option = "")
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
virtual voidTObject::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() const
virtual TObject*TObject::DrawClone(Option_t* option = "") const
virtual voidTObject::Dump() const
virtual Int_tTHaAnalysisObject::End(THaRunBase* r = 0)
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTObject::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual voidTNamed::FillBuffer(char*& buffer)
virtual TObject*TObject::FindObject(const char* name) const
virtual TObject*TObject::FindObject(const TObject* obj) const
static voidTHaAnalysisObject::GeoToSph(Double_t th_geo, Double_t ph_geo, Double_t& th_sph, Double_t& ph_sph)
Double_tGetCollDist() const
const char*THaAnalysisObject::GetConfig() const
Double_tGetCurrent() const
virtual const char*THaAnalysisObject::GetDBFileName() const
Int_tTHaAnalysisObject::GetDebug() const
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
virtual const char*TObject::GetIconName() const
TDatimeTHaAnalysisObject::GetInitDate() const
virtual const char*TNamed::GetName() const
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TObject::GetOption() const
Double_tGetPcentral() const
const char*THaAnalysisObject::GetPrefix() const
virtual const char*TNamed::GetTitle() const
virtual UInt_tTObject::GetUniqueID() const
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTNamed::Hash() const
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
THaAnalysisObject::EStatusTHaAnalysisObject::Init()
virtual THaAnalysisObject::EStatusTHaAnalysisObject::Init(const TDatime& run_time)
virtual Int_tTHaAnalysisObject::InitOutput(THaOutput*)
virtual voidTObject::Inspect() const
static Bool_tTHaAnalysisObject::IntersectPlaneWithRay(const TVector3& xax, const TVector3& yax, const TVector3& org, const TVector3& ray_start, const TVector3& ray_vect, Double_t& length, TVector3& intersect)
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
Bool_tTHaAnalysisObject::IsInit() const
Bool_tTHaAnalysisObject::IsOK() const
Bool_tTHaAnalysisObject::IsOKOut()
Bool_tTObject::IsOnHeap() const
virtual Bool_tTNamed::IsSortable() const
Bool_tTObject::IsZombie() const
static Int_tTHaAnalysisObject::LoadDB(FILE* file, const TDatime& date, const DBRequest* request, const char* prefix = "", Int_t search = 0)
static Int_tTHaAnalysisObject::LoadDB(FILE* file, const TDatime& date, const TagDef* tags, const char* prefix = "", Int_t search = 0)
static Int_tTHaAnalysisObject::LoadDBvalue(FILE* file, const TDatime& date, const char* tag, Double_t& value)
static Int_tTHaAnalysisObject::LoadDBvalue(FILE* file, const TDatime& date, const char* tag, Int_t& value)
static Int_tTHaAnalysisObject::LoadDBvalue(FILE* file, const TDatime& date, const char* tag, string& text)
static Int_tTHaAnalysisObject::LoadDBvalue(FILE* file, const TDatime& date, const char* tag, TString& text)
virtual voidTNamed::ls(Option_t* option = "") const
voidTObject::MayNotUse(const char* method) const
virtual Bool_tTObject::Notify()
static FILE*THaAnalysisObject::OpenFile(const char* name, const TDatime& date, const char* here = "OpenFile()", const char* filemode = "r", const int debug_flag = 1)
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
TNamed&TNamed::operator=(const TNamed& rhs)
virtual voidTObject::Paint(Option_t* option = "")
virtual voidTObject::Pop()
virtual voidTNamed::Print(Option_t* option = "") const
virtual Int_tTObject::Read(const char* name)
virtual voidTObject::RecursiveRemove(TObject* obj)
voidTObject::ResetBit(UInt_t f)
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") const
virtual voidTObject::SavePrimitive(basic_ostream<char,char_traits<char> >& out, Option_t* option = "")
static Int_tTHaAnalysisObject::SeekDBconfig(FILE* file, const char* tag, const char* label = "config", Bool_t end_on_tag = false)
static Int_tTHaAnalysisObject::SeekDBdate(FILE* file, const TDatime& date, Bool_t end_on_tag = false)
Bool_tSetBeamName(const char*)
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
voidTHaAnalysisObject::SetConfig(const char* label)
virtual voidTHaAnalysisObject::SetDebug(Int_t level)
virtual voidTObject::SetDrawOption(Option_t* option = "")
static voidTObject::SetDtorOnly(void* obj)
virtual voidTHaAnalysisObject::SetName(const char* name)
virtual voidTHaAnalysisObject::SetNameTitle(const char* name, const char* title)
static voidTObject::SetObjectStat(Bool_t stat)
virtual voidTNamed::SetTitle(const char* title = "")
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidShowMembers(TMemberInspector& insp, char* parent)
virtual Int_tTNamed::Sizeof() const
static voidTHaAnalysisObject::SphToGeo(Double_t th_sph, Double_t ph_sph, Double_t& th_geo, Double_t& ph_geo)
THaAnalysisObject::EStatusTHaAnalysisObject::Status() const
virtual voidStreamer(TBuffer& b)
voidStreamerNVirtual(TBuffer& b)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
virtual voidTObject::UseCurrentStyle()
static vector<std::string>THaAnalysisObject::vsplit(const string& s)
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
virtual Int_tZeroOrderCorrection(Double_t& Th, Double_t& Ph, Double_t& P, Double_t& PathLen)
protected:
virtual Int_tTHaAnalysisObject::DefineVariables(THaAnalysisObject::EMode mode = kDefine)
Int_tTHaAnalysisObject::DefineVarsFromList(const VarDef* list, THaAnalysisObject::EMode mode = kDefine, const char* var_prefix = "") const
Int_tTHaAnalysisObject::DefineVarsFromList(const RVarDef* list, THaAnalysisObject::EMode mode = kDefine, const char* var_prefix = "") const
Int_tTHaAnalysisObject::DefineVarsFromList(const void* list, THaAnalysisObject::EType type, THaAnalysisObject::EMode mode, const char* var_prefix = "") const
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
THaAnalysisObject*THaAnalysisObject::FindModule(const char* name, const char* classname, bool do_error = true)
virtual THaAnalysisObject*FindModuleNoCheck(const char* name, const char* classname)
static vector<std::string>THaAnalysisObject::GetDBFileList(const char* name, const TDatime& date, const char* here = "GetDBFileList()")
virtual const char*THaAnalysisObject::Here(const char*) const
virtual voidMakePrefix()
voidTObject::MakeZombie()
virtual FILE*THaAnalysisObject::OpenFile(const TDatime& date)
virtual FILE*THaAnalysisObject::OpenRunDBFile(const TDatime& date)
static char*THaAnalysisObject::ReadComment(FILE* fp, char* buf, const int len)
virtual Int_tReadDatabase(const TDatime& date)
virtual Int_tReadRunDatabase(const TDatime& date)
virtual Int_tTHaAnalysisObject::RemoveVariables()

Data Members

public:
enum THaAnalysisObject::EStatus { kOK
kNotinit
kInitError
kFileError
};
enum THaAnalysisObject::EType { kVarDef
kRVarDef
};
enum THaAnalysisObject::EMode { kDefine
kDelete
};
enum THaAnalysisObject::EProperties { kNeedsRunDB
};
enum TObject::EStatusBits { kCanDelete
kMustCleanup
kObjInCanvas
kIsReferenced
kHasUUID
kCannotPick
kNoContextMenu
kInvalidObject
};
enum TObject::[unnamed] { kIsOnHeap
kNotDeleted
kZombie
kBitMask
kSingleKey
kOverwrite
kWriteDelete
};
public:
static const Double_tTHaAnalysisObject::kBig= 1.e38; // default junk value
protected:
TReffBeam
TStringTHaAnalysisObject::fConfigConfiguration to use from database
Double_tfCurrentCentral momentum (GeV)
Int_tTHaAnalysisObject::fDebugDebug level
TStringfDefBeamName
TRotationfHCS2TCS
TDatimeTHaAnalysisObject::fInitDateDate passed to Init
Bool_tTHaAnalysisObject::fIsInitFlag indicating that ReadDatabase done
Bool_tTHaAnalysisObject::fIsSetupFlag indicating that DefineVariables done.
TStringTNamed::fNameobject identifier
Bool_tTHaAnalysisObject::fOKOutFlag indicating object-output prepared
Double_tfPShift
Double_tfPathLenShift
Double_tfPhShift
char*THaAnalysisObject::fPrefixName prefix for global variables
UInt_tTHaAnalysisObject::fPropertiesProperties of this object (see EProperties)
TReffSpecpointer to BigBite
THaAnalysisObject::EStatusTHaAnalysisObject::fStatusInitialization status flag
TRotationfTCS2HCS
TRotationfTCS2TRCS
TVector3fTCSOffSetInHCS
TRotationfTRCS2TCS
TVector3fTRCSOffSetInTCS
Double_tfThShift
TStringTNamed::fTitleobject title

Class Charts

Inheritance Chart:
TObject
TNamed
THaAnalysisObject
THaOptics
THaOpticsAGen
THaOpticsAnalytical
THaOpticsE06010
THaOpticsHRS
THaOpticsNoFeild

Function documentation

THaOptics(const char* name, const char* desc, THaSpectrometer* pspec, TString strBeamDetectorName = "")
 constructor function of THaOptics
~THaOptics()
{}
Int_t ReadDatabase(const TDatime& date)
Int_t ReadRunDatabase(const TDatime& date)
 Query the run database for parameters specific to this spectrometer
Int_t ApplyOptics(THaTrack* track)
 gateway function. calculation optics for *track, and fill result back to it.
 it will use the beam position provided by detector with name fDefBeamName,
 as long as fDefBeamName is not NULL

 The calculation is reading in track X,Y,Theta,Phi in TRCS and fill in any
 thing else in THaTrack
Int_t ApplyOptics(THaTrack* track, TVector3 beampos, TVector3 beamdir)
Read in track X,Y,Theta,Phi in DCS and fill in any thing else in THaTrack
Int_t ApplyOptics(Double_t trackX, Double_t trackY, Double_t trackTheta, Double_t trackPhi, TVector3 beamPos, TVector3 beamDir, TVector3& P, TVector3& Vertex, Double_t& TargetX, Double_t& TargetY, Double_t& TargetTheta, Double_t& TargetPhi, Double_t& PathLen)
gateway function to main optics calculation.
any derived optics class should reload this function.

as base class, THaOptics is not supposed to provide any optics calculation,
therefore THaOptics::ApplyOptics only outputs feature of a central trajectory

Warning: THaOptics::ApplyOptics is for test only.
THaAnalysisObject* FindModuleNoCheck(const char* name, const char* classname)
 Locate the object 'name' in the global list of Analysis Modules
 and check if it inherits from 'classname' (if given),
 BUT, I do NOT check whether the modules is properly initialized.

 Return pointer to valid object, else return NULL and set fStatus.

static const char* const here = "FindModuleNoCheck()";
static const char* const anaobj = "THaAnalysisObject";

if( !name || !*name ) {
Error( Here(here), "No module name given." );
return NULL;
}
DEBUG_INFO( Here(here),
"Looking for Modules with name %s and derived from class %s."
, name, classname );

DEBUG_INFO( Here(here), "Looking for Module %s in fgModules.",
name);
TObject* obj = fgModules->FindObject( name );

if( !obj ) {
DEBUG_INFO( Here(here), "Module %s does not exist.", name );
return NULL;
}
DEBUG_INFO( Here(here), "Module %s (%s) is found.",
obj->GetName(), obj->GetTitle() );

if( !obj->IsA()->InheritsFrom( anaobj )) {
DEBUG_INFO( Here(here), "Module %s (%s) is not a %s.",
obj->GetName(), obj->GetTitle(), anaobj );
return NULL;
}
if( classname && *classname && strcmp(classname,anaobj) &&
!obj->IsA()->InheritsFrom( classname )) {
DEBUG_INFO( Here(here), "Module %s (%s) is not a %s.",
obj->GetName(), obj->GetTitle(), classname );
return NULL;
}
THaAnalysisObject* aobj = static_cast<THaAnalysisObject*>( obj );
assert(aobj);
if( !aobj->IsOK() ) {
  Error( Here(here), "Module %s (%s) not initialized.",
  obj->GetName(), obj->GetTitle() );
  return NULL;
}
return aobj;
void MakePrefix()
 Set up name prefix to include spectrumeter name
Bool_t SetBeamName(const char* )
override the beam detector setting.
return 0 if successfull
Double_t GetPcentral()
return the central momentum
Double_t GetCollDist()
return the central momentum
TVector2 CrossingLineLine2D(TVector2 o1, TVector2 d1, TVector2 o2, TVector2 d2)
return crossing point of two 2D lines.
Each line is defined by a point on the line oi and an direction di
void Clear(Option_t* opt = "")
{}
TVector3 CrossingSurfLine3D(TVector3 OSurf, TVector3 NSurf, TVector3 OLine, TVector3 DLine)
Double_t GetCurrent()
{return fCurrent;}
return ZeroOrderCorrection(Double_t& Th, Double_t& Ph, Double_t& P, Double_t& PathLen)
hift reconstructed variables by selected orders of corection

Author: Jin Huang Jan 2008
Last update: Tue Jul 7 19:26:17 2009

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.