Skip to content

Commit

Permalink
add cheetah
Browse files Browse the repository at this point in the history
  • Loading branch information
Chu-Ping committed Oct 30, 2023
1 parent 2251e1d commit a103d3c
Show file tree
Hide file tree
Showing 14 changed files with 956 additions and 58 deletions.
39 changes: 31 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
# Chu-Ping Yu <chu-ping.yu@uantwerpen.be>
#

cmake_minimum_required(VERSION 3.16.0)
cmake_minimum_required(VERSION 3.21.0)

project(RICOM LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
Expand Down Expand Up @@ -77,14 +77,15 @@ if (WIN32)
file(COPY ${SDL2_LIB_DIR}/SDL2_image.dll DESTINATION ${BUILD_DIR})
file(COPY ${FFTW3_DIR}/libfftw3f-3.dll DESTINATION ${BUILD_DIR})
file(COPY ${FFTW3_DIR}/libfftw3f-3.lib DESTINATION ${BUILD_DIR})
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10485760")
endif (WIN32)

add_executable(RICOM src/main.cpp)

target_sources( RICOM PRIVATE
imgui/misc/cpp/imgui_stdlib.cpp
imgui/imgui_draw.cpp
imgui/imgui_tables.cpp
imgui/misc/cpp/imgui_stdlib.cpp
imgui/imgui_draw.cpp
imgui/imgui_tables.cpp
imgui/imgui_widgets.cpp
imgui/backends/imgui_impl_opengl3.cpp
imgui/backends/imgui_impl_sdl.cpp
Expand All @@ -93,6 +94,8 @@ target_sources( RICOM PRIVATE
src/FileConnector.cpp
src/ProgressMonitor.cpp
src/Ricom.cpp
src/cameras/CheetahInterface.cpp
src/cameras/CheetahWrapper.cpp
src/cameras/TimepixInterface.cpp
src/cameras/TimepixWrapper.cpp
src/cameras/MerlinInterface.cpp
Expand All @@ -106,7 +109,21 @@ target_sources( RICOM PRIVATE
src/RunGUI.cpp
)

target_include_directories( RICOM PUBLIC
## cpr
include(FetchContent)
FetchContent_Declare(cpr GIT_REPOSITORY https://github.com/libcpr/cpr.git
GIT_TAG 0817715923c9705e68994eb52ef9df3f6845beba) # The commit hash for 1.10.x. Replace with the latest from: https://github.com/libcpr/cpr/releases
set(CPR_ENABLE_SSL OFF)
FetchContent_MakeAvailable(cpr)
target_link_libraries(RICOM PRIVATE cpr::cpr)
##json
# include(FetchContent)
# FetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.11.2/json.tar.xz)
# FetchContent_MakeAvailable(json)
# target_link_libraries(RICOM PRIVATE nlohmann_json::nlohmann_json)
set(JSON_BuildTests OFF CACHE INTERNAL "")

target_include_directories( RICOM PRIVATE
imgui
imgui/backends
imgui/misc/cpp
Expand All @@ -119,9 +136,15 @@ target_include_directories( RICOM PUBLIC

find_package(OpenGL REQUIRED)

target_link_libraries(RICOM PUBLIC ${OPENGL_LIBRARIES})


target_link_libraries(RICOM PRIVATE ${OPENGL_LIBRARIES})
if (WIN32)
target_link_libraries(RICOM PUBLIC SDL2main SDL2 SDL2_image libfftw3f-3 ${CMAKE_DL_LIBS})
target_link_libraries(RICOM PRIVATE SDL2main SDL2 SDL2_image libfftw3f-3 ${CMAKE_DL_LIBS})
add_custom_command(TARGET RICOM POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:RICOM> $<TARGET_RUNTIME_DLLS:RICOM>
COMMAND_EXPAND_LISTS
)
else ()
target_link_libraries(RICOM PUBLIC SDL2main SDL2 SDL2_image fftw3f ${CMAKE_DL_LIBS})
target_link_libraries(RICOM PRIVATE SDL2main SDL2 SDL2_image fftw3f ${CMAKE_DL_LIBS})
endif (WIN32)
2 changes: 2 additions & 0 deletions src/Camera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include "Camera.h"
#include "MerlinInterface.h"
#include "TimepixInterface.h"
#include "CheetahInterface.h"

using namespace CAMERA;

Expand All @@ -38,6 +39,7 @@ Default_configurations::Default_configurations()
hws_ptr = &hws[0];
hws[MERLIN] = Camera<MerlinInterface, FRAME_BASED>();
hws[TIMEPIX] = Camera<TimepixInterface, EVENT_BASED>();
hws[CHEETAH] = Camera<CheetahInterface, EVENT_BASED>();
};

CAMERA::Camera_BASE &Default_configurations::operator[](unsigned int index)
Expand Down
7 changes: 5 additions & 2 deletions src/Camera.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,15 @@
// Only forward declaration for Ricom class
class Ricom;



namespace CAMERA
{
enum Camera_model
{
MERLIN,
TIMEPIX,
CHEETAH,
MODELS_COUNT
};

Expand Down Expand Up @@ -93,14 +96,14 @@ namespace CAMERA
void read_frame_com(
std::vector<size_t> &dose_map,
std::vector<size_t> &sumx_map, std::vector<size_t> &sumy_map,
std::vector<float> &stem_map, bool b_stem,
std::vector<float> &stem_map, bool &b_stem,
std::array<float, 2> &offset, std::array<float, 2> &radius,
int &processor_line, int &preprocessor_line, size_t &first_frame, size_t &end_frame
);
void read_frame_com_cbed(
std::vector<size_t> &dose_map,
std::vector<size_t> &sumx_map, std::vector<size_t> &sumy_map,
std::vector<float> &stem_map, bool b_stem,
std::vector<float> &stem_map, bool &b_stem,
std::array<float, 2> &offset, std::array<float, 2> &radius,
std::vector<size_t> &frame, std::array<std::atomic<size_t>, 3> &frame_id_plot_cbed,
int &processor_line, int &preprocessor_line, size_t &first_frame, size_t &end_frame
Expand Down
10 changes: 10 additions & 0 deletions src/Ricom.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1190,10 +1190,12 @@ void Ricom::run_reconstruction(RICOM::modes mode)
// Template specializations, necessary to avoid linker error
template void Ricom::run_reconstruction<MerlinInterface>(RICOM::modes);
template void Ricom::run_reconstruction<TimepixInterface>(RICOM::modes);
template void Ricom::run_reconstruction<CheetahInterface>(RICOM::modes);
template void Ricom::process_data<uint8_t>(CAMERA::Camera<MerlinInterface, CAMERA::FRAME_BASED> *camera_spec);
template void Ricom::process_data<uint16_t>(CAMERA::Camera<MerlinInterface, CAMERA::FRAME_BASED> *camera_spec);
template void Ricom::process_data<uint32_t>(CAMERA::Camera<MerlinInterface, CAMERA::FRAME_BASED> *camera_spec);
template void Ricom::process_data(CAMERA::Camera<TimepixInterface, CAMERA::EVENT_BASED> *camera_spec);
template void Ricom::process_data(CAMERA::Camera<CheetahInterface, CAMERA::EVENT_BASED> *camera_spec);

// Helper functions
void Ricom::reset_limits()
Expand Down Expand Up @@ -1236,6 +1238,11 @@ enum CAMERA::Camera_model Ricom::select_mode_by_file(const char *filename)
mode = RICOM::FILE;
return CAMERA::MERLIN;
}
else if (std::filesystem::path(filename).extension() == ".tpx3")
{
mode = RICOM::FILE;
return CAMERA::CHEETAH;
}
else
{
return CAMERA::TIMEPIX;
Expand All @@ -1252,6 +1259,9 @@ void RICOM::run_ricom(Ricom *r, RICOM::modes mode)
case CAMERA::TIMEPIX:
r->run_reconstruction<TimepixInterface>(mode);
break;
case CAMERA::CHEETAH:
r->run_reconstruction<CheetahInterface>(mode);
break;
default:
break;
}
Expand Down
1 change: 1 addition & 0 deletions src/Ricom.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#include "SocketConnector.h"
#include "ProgressMonitor.h"
#include "MerlinInterface.h"
#include "CheetahInterface.h"
#include "TimepixInterface.h"
#include "Camera.h"
#include "GuiUtils.h"
Expand Down
72 changes: 71 additions & 1 deletion src/RunGUI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ int run_gui(Ricom *ricom, CAMERA::Default_configurations &hardware_configuration
// create a file browser instances
ImGui::FileBrowser openFileDialog;
openFileDialog.SetTitle("Open .mib or .t3p file");
openFileDialog.SetTypeFilters({".mib", ".t3p"});
openFileDialog.SetTypeFilters({".mib", ".t3p", ".tpx3"});
ImGui::FileBrowser saveFileDialog(ImGuiFileBrowserFlags_EnterNewFilename | ImGuiFileBrowserFlags_CreateNewDir);
saveFileDialog.SetTitle("Save image as .png");
ImGui::FileBrowser saveDataDialog(ImGuiFileBrowserFlags_EnterNewFilename | ImGuiFileBrowserFlags_CreateNewDir);
Expand All @@ -181,6 +181,11 @@ int run_gui(Ricom *ricom, CAMERA::Default_configurations &hardware_configuration
// Merlin Settings (to send to the Camera)
struct MerlinSettings merlin_settings;

// Cheetah Setting (to send to the server)
CheetahComm cheetah_comm;
ricom->socket.connect_socket();


// INI file settings to restore previous session settings
// Appearance
int font_index = 0;
Expand Down Expand Up @@ -211,6 +216,11 @@ int run_gui(Ricom *ricom, CAMERA::Default_configurations &hardware_configuration
// Timepix Settings
ImGuiINI::check_ini_setting(ini_cfg, "Timepix", "nx", hardware_configurations[CAMERA::MERLIN].nx_cam);
ImGuiINI::check_ini_setting(ini_cfg, "Timepix", "ny", hardware_configurations[CAMERA::MERLIN].ny_cam);
// Cheetah Settings
ImGuiINI::check_ini_setting(ini_cfg, "Cheetah", "nx", hardware_configurations[CAMERA::CHEETAH].nx_cam);
ImGuiINI::check_ini_setting(ini_cfg, "Cheetah", "ny", hardware_configurations[CAMERA::CHEETAH].ny_cam);
ImGuiINI::check_ini_setting(ini_cfg, "Merlin", "data_port", ricom->socket.port);
ImGuiINI::check_ini_setting(ini_cfg, "Merlin", "ip", ricom->socket.ip);

const char *cmaps[] = {"Parula", "Heat", "Jet", "Turbo", "Hot", "Gray", "Magma", "Inferno", "Plasma", "Viridis", "Cividis", "Github", "HSV"};
bool b_redraw = false;
Expand Down Expand Up @@ -343,6 +353,15 @@ int run_gui(Ricom *ricom, CAMERA::Default_configurations &hardware_configuration
ini_cfg["Timepix"]["ny"] = std::to_string(hardware_configurations[CAMERA::TIMEPIX].ny_cam);
}

ImGui::Text("Cheetah Camera");
if (ImGui::DragScalar("nx Cheetah", ImGuiDataType_U16, &hardware_configurations[CAMERA::CHEETAH].nx_cam, 1, &drag_min_pos))
{
ini_cfg["Cheetah"]["nx"] = std::to_string(hardware_configurations[CAMERA::CHEETAH].nx_cam);
}
if (ImGui::DragScalar("ny Cheetah", ImGuiDataType_U16, &hardware_configurations[CAMERA::CHEETAH].ny_cam, 1, &drag_min_pos))
{
ini_cfg["Cheetah"]["ny"] = std::to_string(hardware_configurations[CAMERA::CHEETAH].ny_cam);
}
ImGui::EndMenu();
}
if (ImGui::BeginMenu("Additional Imaging Modes"))
Expand Down Expand Up @@ -562,6 +581,57 @@ int run_gui(Ricom *ricom, CAMERA::Default_configurations &hardware_configuration
}
}

if (ImGui::CollapsingHeader("Stream reconstruction", ImGuiTreeNodeFlags_DefaultOpen)){

if (ImGui::Button("Preview", ImVec2(-1.0f, 0.0f)))
{
cheetah_comm.stop();
ricom->b_continuous = true;
cheetah_comm.tpx3_det_config();
cheetah_comm.tpx3_cam_init();
cheetah_comm.tpx3_destination();


// ricom->socket.connect_socket();
// ricom->socket.flush_socket();
b_started = true;
b_restarted = true;
run_thread = std::thread(RICOM::run_ricom, ricom, RICOM::TCP);
run_thread.detach();
std::this_thread::sleep_for(std::chrono::milliseconds(500));
cheetah_comm.start();
// RICOM::run_ricom(ricom, RICOM::TCP);
GENERIC_WINDOW("RICOM").set_data(ricom->nx, ricom->ny, &ricom->ricom_data);
}

if (ImGui::Button("Acquire", ImVec2(-1.0f, 0.0f)))
{
cheetah_comm.stop();
ricom->b_continuous = false;
cheetah_comm.tpx3_det_config();
cheetah_comm.tpx3_cam_init();
cheetah_comm.tpx3_destination();

run_thread = std::thread(RICOM::run_ricom, ricom, RICOM::TCP);
run_thread.detach();
std::this_thread::sleep_for(std::chrono::milliseconds(500));
cheetah_comm.start();
GENERIC_WINDOW("RICOM").set_data(ricom->nx, ricom->ny, &ricom->ricom_data);
}

if (ImGui::Button("Stop", ImVec2(-1.0f, 0.0f)))
{
cheetah_comm.stop();
ricom->rc_quit = true;
ricom->b_continuous = false;
// b_redraw = true;
}

ImGui::Checkbox("Cumulative Mode", &ricom->b_cumulative);

}


if (ImGui::CollapsingHeader("File reconstruction", ImGuiTreeNodeFlags_DefaultOpen))
{

Expand Down
Loading

0 comments on commit a103d3c

Please sign in to comment.