astroimsim_data/
detector.rs1use std::time::Instant;
2use astroimsim_geometry::grid2d::GRID2D;
3use astroimsim_geometry::points::Point;
4use astroimsim_geometry::coordinate_system::{CoordinateSystem, Coordinates};
5use uvex_fitrs::{Fits, Hdu};
6use crate::point_sources::FullSpectrumSourceList;
7use crate::psf_grid::PsfGrid;
8use std::fs;
9use crate::spatial_effect::SpatialEffect;
10
11#[derive(Clone,Debug)]
12pub struct Detector {
13 pub label: String,
14 pub grid: GRID2D,
15 pub data: Vec<Vec<[f64;2]>>,
16}
17
18impl Detector {
19
20
21 pub fn new(label:String, grid: GRID2D)->Detector{
22 Detector{
23 label,
24 grid,
25 data:vec![vec![]]
26 }
27
28 }
29
30 pub fn write(&mut self,label:usize){
31
32
33 let width = self.data[0].len();
34 let height = self.data.len();
35 let shape = [width, height];
36
37 let mut fuv_counts_path = "/Users/mayabasu/Desktop/Output/fuv/testtt".to_string();
38 fuv_counts_path.push_str(label.to_string().as_str());
39 fuv_counts_path.push_str(".fits");
40
41 let mut nuv_counts_path = "/Users/mayabasu/Desktop/Output/nuv/testtt".to_string();
42 nuv_counts_path.push_str(label.to_string().as_str());
43 nuv_counts_path.push_str(".fits");
44
45 let fuv_counts:Vec<f64> = self.data.iter().flatten().map(|a|a[0]).collect();
66 let nuv_counts:Vec<f64> = self.data.iter().flatten().map(|a|a[1]).collect();
67
68
69
70
71 let mut fuv_counts_primary_hdu = Hdu::new(&shape, fuv_counts);
78 let mut nuv_counts_primary_hdu = Hdu::new(&shape, nuv_counts);
79
80
81 Fits::create(fuv_counts_path, fuv_counts_primary_hdu).expect("Failed to create");
90 Fits::create(nuv_counts_path, nuv_counts_primary_hdu).expect("Failed to create");
91
92
93
94
95
96 }
97
98 pub fn show(path:&str){
99 }
101
102 pub fn create_constant_background(&mut self, fuv_background_brightness:f64,nuv_background_brightness:f64){
103 let mut data = Vec::with_capacity(self.grid.y_num);
104 for row in 0..self.grid.y_num{
105 let mut row_vec = Vec::with_capacity(self.grid.x_num);
106 for column in 0..self.grid.x_num{
107 row_vec.push([fuv_background_brightness,nuv_background_brightness])
108 }
109 data.push(row_vec);
110 }
111 self.data= data;
112 }
113 pub fn multiply_effect(&mut self, effect:SpatialEffect,index:usize){
114 assert_eq!(effect.grid.num_points, self.grid.num_points, "Grids are not equal");
115 for row in 0..self.grid.y_num{
116 for column in 0..self.grid.x_num{
117 self.data[column][row][index] = self.data[column][row][index]*effect.data[column][row];
118 }
119 }
120 }
121
122 pub fn add_effect(&mut self, effect:SpatialEffect,index:usize){
123 assert_eq!(effect.grid.num_points, self.grid.num_points, "Grids are not equal");
124 for row in 0..self.grid.y_num{
125 for column in 0..self.grid.x_num{
126 self.data[column][row][index] = self.data[column][row][index]+effect.data[column][row];
127 }
128 }
129 }
130
131}
132
133pub struct DetectorArray{
134 pub label: String,
135 pub detectors: Vec<Detector>,
136 pub coordinate_system: CoordinateSystem
137}
138
139
140
141
142