Components
TABASCAL uses a component-based model description. This means that various different models can be created where each model component can be selected freely in a configuration file. Therefore, each component should work with all others. There is a standard component class template where the base class is defined in Component
![digraph Components {
graph [rankdir=TB, fontsize=10];
node [shape=box, style="rounded,filled", fillcolor=white, fontcolor=black];
edge [color=black];
// Top-level components
Traj [label="Trajectory\nComponent", shape=box];
RFISig [label="RFI Signal\nComponent", shape=box];
RFIVis [label="RFI Visibility\nCalculation\nComponent", shape=box];
AstPos [label="Astronomical\nPosition\nComponent", shape=box];
AstSig [label="Astronomical\nSignal\nComponent", shape=box];
AstVis [label="Astronomical\nVisibility\nComponent", shape=box];
Gain [label="Gain\nComponent", shape=box];
// Data nodes
rfi_xyz [label="• rfi_xyz\l• rfi_phase", shape=ellipse, fillcolor=lightgray, fontname="Courier"];
rfi_A [label="rfi_A", shape=ellipse, fillcolor=lightgray, fontname="Courier"];
vis_rfi [label="vis_rfi", shape=ellipse, fillcolor=lightgray, fontname="Courier"];
ast_radec [label="ast_radec", shape=ellipse, fillcolor=lightgray, fontname="Courier"];
ast_I [label="ast_I", shape=ellipse, fillcolor=lightgray, fontname="Courier"];
vis_ast [label="vis_ast", shape=ellipse, fillcolor=lightgray, fontname="Courier"];
vis_obs [label="• gains\l• vis_obs", shape=ellipse, fillcolor=lightgray, fontname="Courier"];
// Edges
Traj -> rfi_xyz;
RFISig -> rfi_A;
rfi_xyz -> RFIVis;
rfi_A -> RFIVis;
RFIVis -> vis_rfi;
AstPos -> ast_radec;
AstSig -> ast_I;
ast_radec -> AstVis;
ast_I -> AstVis;
AstVis -> vis_ast;
vis_rfi -> Gain;
vis_ast -> Gain;
Gain -> vis_obs;
}](_images/graphviz-a765ab0db7b19e7f111936189d20e9967f1d0c72.png)