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.
THaOptics(const char* name, const char* desc, THaSpectrometer* pspec, TString strBeamDetectorName = "") | |
virtual | ~THaOptics() |
void | TObject::AbstractMethod(const char* method) const |
virtual void | TObject::AppendPad(Option_t* option = "") |
virtual Int_t | ApplyCorrection(Double_t& Th, Double_t& Ph, Double_t& P, Double_t& PathLen) |
virtual Int_t | ApplyOptics(THaTrack* track) |
virtual Int_t | ApplyOptics(THaTrack* track, TVector3 beampos, TVector3 beamdir) |
virtual 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) |
virtual Int_t | THaAnalysisObject::Begin(THaRunBase* r = 0) |
virtual void | TObject::Browse(TBrowser* b) |
static TClass* | Class() |
virtual const char* | TObject::ClassName() const |
virtual void | Clear(Option_t* opt = "") |
virtual TObject* | TNamed::Clone(const char* newname = "") const |
virtual Int_t | TNamed::Compare(const TObject* obj) const |
virtual void | TNamed::Copy(TObject& named) const |
TVector2 | CrossingLineLine2D(TVector2 o1, TVector2 d1, TVector2 o2, TVector2 d2) |
TVector3 | CrossingSurfLine3D(TVector3 OSurf, TVector3 NSurf, TVector3 OLine, TVector3 DLine) |
static Int_t | THaAnalysisObject::DefineVarsFromList(const void* list, THaAnalysisObject::EType type, THaAnalysisObject::EMode mode, const char* var_prefix, const TObject* obj, const char* prefix, const char* here) |
virtual void | TObject::Delete(Option_t* option = "") |
virtual Int_t | TObject::DistancetoPrimitive(Int_t px, Int_t py) |
virtual void | TObject::Draw(Option_t* option = "") |
virtual void | TObject::DrawClass() const |
virtual TObject* | TObject::DrawClone(Option_t* option = "") const |
virtual void | TObject::Dump() const |
virtual Int_t | THaAnalysisObject::End(THaRunBase* r = 0) |
virtual void | TObject::Error(const char* method, const char* msgfmt) const |
virtual void | TObject::Execute(const char* method, const char* params, Int_t* error = 0) |
virtual void | TObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0) |
virtual void | TObject::ExecuteEvent(Int_t event, Int_t px, Int_t py) |
virtual void | TObject::Fatal(const char* method, const char* msgfmt) const |
virtual void | TNamed::FillBuffer(char*& buffer) |
virtual TObject* | TObject::FindObject(const char* name) const |
virtual TObject* | TObject::FindObject(const TObject* obj) const |
static void | THaAnalysisObject::GeoToSph(Double_t th_geo, Double_t ph_geo, Double_t& th_sph, Double_t& ph_sph) |
Double_t | GetCollDist() const |
const char* | THaAnalysisObject::GetConfig() const |
Double_t | GetCurrent() const |
virtual const char* | THaAnalysisObject::GetDBFileName() const |
Int_t | THaAnalysisObject::GetDebug() const |
virtual Option_t* | TObject::GetDrawOption() const |
static Long_t | TObject::GetDtorOnly() |
virtual const char* | TObject::GetIconName() const |
TDatime | THaAnalysisObject::GetInitDate() const |
virtual const char* | TNamed::GetName() const |
virtual char* | TObject::GetObjectInfo(Int_t px, Int_t py) const |
static Bool_t | TObject::GetObjectStat() |
virtual Option_t* | TObject::GetOption() const |
Double_t | GetPcentral() const |
const char* | THaAnalysisObject::GetPrefix() const |
virtual const char* | TNamed::GetTitle() const |
virtual UInt_t | TObject::GetUniqueID() const |
virtual Bool_t | TObject::HandleTimer(TTimer* timer) |
virtual ULong_t | TNamed::Hash() const |
virtual void | TObject::Info(const char* method, const char* msgfmt) const |
virtual Bool_t | TObject::InheritsFrom(const char* classname) const |
virtual Bool_t | TObject::InheritsFrom(const TClass* cl) const |
THaAnalysisObject::EStatus | THaAnalysisObject::Init() |
virtual THaAnalysisObject::EStatus | THaAnalysisObject::Init(const TDatime& run_time) |
virtual Int_t | THaAnalysisObject::InitOutput(THaOutput*) |
virtual void | TObject::Inspect() const |
static Bool_t | THaAnalysisObject::IntersectPlaneWithRay(const TVector3& xax, const TVector3& yax, const TVector3& org, const TVector3& ray_start, const TVector3& ray_vect, Double_t& length, TVector3& intersect) |
void | TObject::InvertBit(UInt_t f) |
virtual TClass* | IsA() const |
virtual Bool_t | TObject::IsEqual(const TObject* obj) const |
virtual Bool_t | TObject::IsFolder() const |
Bool_t | THaAnalysisObject::IsInit() const |
Bool_t | THaAnalysisObject::IsOK() const |
Bool_t | THaAnalysisObject::IsOKOut() |
Bool_t | TObject::IsOnHeap() const |
virtual Bool_t | TNamed::IsSortable() const |
Bool_t | TObject::IsZombie() const |
static Int_t | THaAnalysisObject::LoadDB(FILE* file, const TDatime& date, const DBRequest* request, const char* prefix = "", Int_t search = 0) |
static Int_t | THaAnalysisObject::LoadDB(FILE* file, const TDatime& date, const TagDef* tags, const char* prefix = "", Int_t search = 0) |
static Int_t | THaAnalysisObject::LoadDBvalue(FILE* file, const TDatime& date, const char* tag, Double_t& value) |
static Int_t | THaAnalysisObject::LoadDBvalue(FILE* file, const TDatime& date, const char* tag, Int_t& value) |
static Int_t | THaAnalysisObject::LoadDBvalue(FILE* file, const TDatime& date, const char* tag, string& text) |
static Int_t | THaAnalysisObject::LoadDBvalue(FILE* file, const TDatime& date, const char* tag, TString& text) |
virtual void | TNamed::ls(Option_t* option = "") const |
void | TObject::MayNotUse(const char* method) const |
virtual Bool_t | TObject::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 void | TObject::operator delete(void* ptr) |
static void | TObject::operator delete(void* ptr, void* vp) |
static void | TObject::operator delete[](void* ptr) |
static void | TObject::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 void | TObject::Paint(Option_t* option = "") |
virtual void | TObject::Pop() |
virtual void | TNamed::Print(Option_t* option = "") const |
virtual Int_t | TObject::Read(const char* name) |
virtual void | TObject::RecursiveRemove(TObject* obj) |
void | TObject::ResetBit(UInt_t f) |
virtual void | TObject::SaveAs(const char* filename = "", Option_t* option = "") const |
virtual void | TObject::SavePrimitive(basic_ostream<char,char_traits<char> >& out, Option_t* option = "") |
static Int_t | THaAnalysisObject::SeekDBconfig(FILE* file, const char* tag, const char* label = "config", Bool_t end_on_tag = false) |
static Int_t | THaAnalysisObject::SeekDBdate(FILE* file, const TDatime& date, Bool_t end_on_tag = false) |
Bool_t | SetBeamName(const char*) |
void | TObject::SetBit(UInt_t f) |
void | TObject::SetBit(UInt_t f, Bool_t set) |
void | THaAnalysisObject::SetConfig(const char* label) |
virtual void | THaAnalysisObject::SetDebug(Int_t level) |
virtual void | TObject::SetDrawOption(Option_t* option = "") |
static void | TObject::SetDtorOnly(void* obj) |
virtual void | THaAnalysisObject::SetName(const char* name) |
virtual void | THaAnalysisObject::SetNameTitle(const char* name, const char* title) |
static void | TObject::SetObjectStat(Bool_t stat) |
virtual void | TNamed::SetTitle(const char* title = "") |
virtual void | TObject::SetUniqueID(UInt_t uid) |
virtual void | ShowMembers(TMemberInspector& insp, char* parent) |
virtual Int_t | TNamed::Sizeof() const |
static void | THaAnalysisObject::SphToGeo(Double_t th_sph, Double_t ph_sph, Double_t& th_geo, Double_t& ph_geo) |
THaAnalysisObject::EStatus | THaAnalysisObject::Status() const |
virtual void | Streamer(TBuffer& b) |
void | StreamerNVirtual(TBuffer& b) |
virtual void | TObject::SysError(const char* method, const char* msgfmt) const |
Bool_t | TObject::TestBit(UInt_t f) const |
Int_t | TObject::TestBits(UInt_t f) const |
virtual void | TObject::UseCurrentStyle() |
static vector<std::string> | THaAnalysisObject::vsplit(const string& s) |
virtual void | TObject::Warning(const char* method, const char* msgfmt) const |
virtual Int_t | TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) |
virtual Int_t | TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const |
virtual Int_t | ZeroOrderCorrection(Double_t& Th, Double_t& Ph, Double_t& P, Double_t& PathLen) |
virtual Int_t | THaAnalysisObject::DefineVariables(THaAnalysisObject::EMode mode = kDefine) |
Int_t | THaAnalysisObject::DefineVarsFromList(const VarDef* list, THaAnalysisObject::EMode mode = kDefine, const char* var_prefix = "") const |
Int_t | THaAnalysisObject::DefineVarsFromList(const RVarDef* list, THaAnalysisObject::EMode mode = kDefine, const char* var_prefix = "") const |
Int_t | THaAnalysisObject::DefineVarsFromList(const void* list, THaAnalysisObject::EType type, THaAnalysisObject::EMode mode, const char* var_prefix = "") const |
virtual void | TObject::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 void | MakePrefix() |
void | TObject::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_t | ReadDatabase(const TDatime& date) |
virtual Int_t | ReadRunDatabase(const TDatime& date) |
virtual Int_t | THaAnalysisObject::RemoveVariables() |
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 | ||
}; |
static const Double_t | THaAnalysisObject::kBig | = 1.e38; // default junk value |
TRef | fBeam | |
TString | THaAnalysisObject::fConfig | Configuration to use from database |
Double_t | fCurrent | Central momentum (GeV) |
Int_t | THaAnalysisObject::fDebug | Debug level |
TString | fDefBeamName | |
TRotation | fHCS2TCS | |
TDatime | THaAnalysisObject::fInitDate | Date passed to Init |
Bool_t | THaAnalysisObject::fIsInit | Flag indicating that ReadDatabase done |
Bool_t | THaAnalysisObject::fIsSetup | Flag indicating that DefineVariables done. |
TString | TNamed::fName | object identifier |
Bool_t | THaAnalysisObject::fOKOut | Flag indicating object-output prepared |
Double_t | fPShift | |
Double_t | fPathLenShift | |
Double_t | fPhShift | |
char* | THaAnalysisObject::fPrefix | Name prefix for global variables |
UInt_t | THaAnalysisObject::fProperties | Properties of this object (see EProperties) |
TRef | fSpec | pointer to BigBite |
THaAnalysisObject::EStatus | THaAnalysisObject::fStatus | Initialization status flag |
TRotation | fTCS2HCS | |
TRotation | fTCS2TRCS | |
TVector3 | fTCSOffSetInHCS | |
TRotation | fTRCS2TCS | |
TVector3 | fTRCSOffSetInTCS | |
Double_t | fThShift | |
TString | TNamed::fTitle | object title |
Inheritance Chart: | |||||||||||||||||||||||||||||||||
|
constructor function of THaOptics
Query the run database for parameters specific to this spectrometer
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
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.
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;
return crossing point of two 2D lines. Each line is defined by a point on the line oi and an direction di
hift reconstructed variables by selected orders of corection