Changeset 42795 for trunk/ippMonitor/raw/pointing.php
- Timestamp:
- Mar 25, 2025, 4:08:45 PM (14 months ago)
- File:
-
- 1 edited
-
trunk/ippMonitor/raw/pointing.php (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippMonitor/raw/pointing.php
r42790 r42795 22 22 23 23 // Fetch data based on range selection 24 $range = isset($_GET['range']) ? $_GET['range'] : ' week';24 $range = isset($_GET['range']) ? $_GET['range'] : 'yday'; 25 25 26 26 echo "<table border=\"0\">"; … … 29 29 echo " <h1 align=\"middle\">Pointing Report</h1>"; 30 30 echo " <center>"; 31 echo ' <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=day">Today (MJD: '.getMJD().')</a> | '; 32 echo ' <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=week">Past week (default)</a> | '; 33 echo ' <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=month">Past month</a> | '; 34 echo ' <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=year">Past year </a> | '; 31 echo ' <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=yday">Last night (default)</a> | '; 32 echo ' <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=day">Today (MJD '.getMJD().')</a> | '; 33 echo ' <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=week">Past 7 days</a> | '; 34 echo ' <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=month">Past 30 days</a> | '; 35 echo ' <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=year">Past 365 days</a> | '; 36 echo ' <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=all">All </a> '; 35 37 echo " </td>"; 36 38 echo "</tr>"; 37 39 echo "</table>"; 38 echo get DataQuality($projectdb, $range);40 echo getPointing($projectdb, $range); 39 41 40 42 menu_end(); … … 51 53 # 52 54 ########################################################################### 53 function get DataQuality($db, $range = 'week') {55 function getPointing($db, $range = 'yday') { 54 56 // Start timer 55 57 $start = microtime(true); … … 61 63 62 64 // Determine the reference exp_name based on the selected range 63 if ($range === 'year') { 64 $expname = "o" . $mjdDay_yearback . "%"; 65 } elseif ($range === 'month') { 66 $expname = "o" . $mjdDay_monthback . "%"; 67 } else { 68 $expname = "o" . ($mjdDay - 7) . "%"; // Default week-based constraint 65 switch ($range) { 66 case 'year': 67 $expname = "o" . $mjdDay_yearback . "%"; 68 break; 69 case 'month': 70 $expname = "o" . $mjdDay_monthback . "%"; 71 break; 72 case 'week': 73 $expname = "o" . ($mjdDay - 7) . "%"; 74 break; 75 case 'day': 76 $expname = "o" . $mjdDay . "%"; 77 break; 78 default: 79 $expname = "o" . ($mjdDay - 1) . "%"; // Default: last night 80 break; 69 81 } 70 82 71 83 // Query to get the minimum exp_id 72 $expIdQuery = "SELECT MIN(exp_id) AS min_exp_id FROM rawExp WHERE rawExp.exp_name LIKE '$expname';"; 73 84 $expIdQuery = "SELECT MIN(exp_id) AS min_exp_id FROM rawExp WHERE rawExp.exp_name LIKE '$expname'"; 74 85 $result = $db->query($expIdQuery); 75 86 76 // Fetch result into $row as an associative array 77 $result->fetchInto($row, DB_FETCHMODE_ASSOC); 87 if (DB::isError($result)) { 88 die("Database error: " . $result->getMessage()); 89 } 90 91 $row = $result->fetchRow(DB_FETCHMODE_ASSOC); 78 92 79 93 if (!empty($row['min_exp_id'])) { 80 94 $min_exp_id = $row['min_exp_id']; 81 echo "Minimum exp_id: " . $min_exp_id;95 // echo "Minimum exp_id: " . $min_exp_id; 82 96 } else { 83 97 echo "No results found."; 84 98 } 85 99 86 echo "<br><br>"; 87 88 // Apply different constraints based on the selected range 89 if ($range === 'year') { 90 // Constraint by dateobs within the last 365 days 91 $dateConstraint = "dateobs >= NOW() - INTERVAL 365 DAY AND rawExp.exp_id >= $min_exp_id"; 92 } elseif ($range === 'month') { 93 // Constraint by dateobs within the last 30 days 94 $dateConstraint = "dateobs >= NOW() - INTERVAL 30 DAY AND rawExp.exp_id >= $min_exp_id"; 95 } else { 96 // Constraint by exp_name for week and day ranges 97 $expnames = array(); 98 $days = ($range === 'day') ? 1 : 7; // Set days to 1 for 'day', otherwise default to 7 (week) 99 100 for ($i = 0; $i < $days; $i++) { 101 $expnames[] = "'o" . ($mjdDay - $i) . "%'"; 102 } 103 $expnameFilter = " (rawExp.exp_name LIKE " . implode(" OR rawExp.exp_name LIKE ", $expnames) . ") AND rawExp.exp_id >= $min_exp_id"; 104 $dateConstraint = $expnameFilter; 105 } 106 107 // Updated SQL query 100 //echo "<br><br>"; 101 102 // Determine the date constraint based on the range 103 switch ($range) { 104 case 'year': 105 $dateConstraint = "dateobs >= NOW() - INTERVAL 365 DAY AND rawExp.exp_id >= $min_exp_id"; 106 break; 107 case 'month': 108 $dateConstraint = "dateobs >= NOW() - INTERVAL 30 DAY AND rawExp.exp_id >= $min_exp_id"; 109 break; 110 case 'week': 111 $expnames = array(); 112 for ($i = 0; $i < 7; $i++) { 113 $expnames[] = "rawExp.exp_name LIKE 'o" . ($mjdDay - $i) . "%'"; 114 } 115 $dateConstraint = "(" . implode(" OR ", $expnames) . ") AND rawExp.exp_id >= $min_exp_id"; 116 break; 117 case 'yday': 118 $dateConstraint = "rawExp.exp_name LIKE 'o" . ($mjdDay - 1) . "%' AND rawExp.exp_id >= $min_exp_id"; 119 break; 120 case 'day': 121 $dateConstraint = "rawExp.exp_name LIKE 'o$mjdDay%' AND rawExp.exp_id >= $min_exp_id"; 122 break; 123 case 'all': 124 $dateConstraint = "rawExp.exp_id >= 0"; 125 break; 126 default: // Default to last night 127 $dateConstraint = "rawExp.exp_name LIKE 'o" . ($mjdDay - 1) . "%' AND rawExp.exp_id >= $min_exp_id"; 128 break; 129 } 130 131 // Updated SQL query 108 132 $sql = "select * from (SELECT SUBTIME(dateobs, '10:00:00') AS time, AST_R0, AST_D0, 109 133 round(( 367*YEAR(dateobs)- FLOOR((7 * (YEAR(dateobs) + FLOOR((MONTH(dateobs) + 9) / 12))) / 4) + FLOOR(275 * MONTH(dateobs) / 9) 110 134 + DAY(dateobs) + 1721013.5 + (HOUR(dateobs) / 24.0) + (MINUTE(dateobs) / 1440.0) + (SECOND(dateobs) / 86400.0) - 2400000.5), 5) AS MJD, 111 filter, exp_time, comment, ra*180/pi() as RA, decl*180/pi() as DECL, AST_RS, AST_DS, AST_T0, posang, exp_name, alt, az, rawExp.exp_id 135 filter, exp_time, comment, ra*180/pi() as RA, decl*180/pi() as DECL, AST_RS, AST_DS, AST_T0, posang, exp_name, alt, az, rawExp.exp_id, camRun.label 112 136 FROM rawExp 113 137 JOIN chipRun USING (exp_id) … … 126 150 return; 127 151 } 128 echo "$sql<br><br>\n";152 // echo "$sql<br><br>\n"; 129 153 130 154 while ($qry->fetchInto($row)) { … … 134 158 // Ensure $DQarray is not empty 135 159 if (empty($DQarray)) { 136 echo "< b>Error:</b> Data array is empty.";160 echo "<center><b> No data for MJD: $mjdDay </b></center>"; 137 161 return; // Stop execution if no data to encode 138 162 } … … 147 171 148 172 echo "<script>console.log(" . json_encode($dataJson) . ");</script>"; // Log JSON output to console for debugging 149 150 echo <<<HTML 151 <!-- Attempt to load Google Charts library from the Google CDN --> 152 <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js" onerror="loadLocalGoogleCharts()"></script> 153 154 <script type="text/javascript"> 155 // Check if Google Charts library loaded successfully 156 window.addEventListener("load", function() { 157 if (typeof google === "undefined" || typeof google.charts === "undefined") { 158 loadLocalGoogleCharts(); 159 } 160 }); 161 162 // Function to load local version of Google Charts if CDN fails 163 function loadLocalGoogleCharts() { 164 console.warn("Google Charts CDN failed, loading local loader.js instead."); 165 var script = document.createElement("script"); 166 script.src = "loader.js"; // Path to your local loader.js file 167 document.head.appendChild(script); 173 echo <<<HTML 174 <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js" onerror="loadLocalGoogleCharts()"></script> 175 176 <script type="text/javascript"> 177 // Check if Google Charts library loaded successfully 178 window.addEventListener("load", function() { 179 if (typeof google === "undefined" || typeof google.charts === "undefined") { 180 loadLocalGoogleCharts(); 168 181 } 182 }); 183 184 // Function to load local version of Google Charts if CDN fails 185 function loadLocalGoogleCharts() { 186 console.warn("Google Charts CDN failed, loading local loader.js instead."); 187 var script = document.createElement("script"); 188 script.src = "loader.js"; // Path to your local loader.js file 189 document.head.appendChild(script); 190 } 169 191 </script> 170 192 … … 187 209 188 210 const rows = dataArray.map(row => { 189 const [timestamp, ra_offset, dec_offset, mjd, filter, exp_time, comment, ra, dec, ra_offset_sig, dec_offset_sig, boresite_ang, position_ang, exp_name, alt, az, exp_id ] = row;211 const [timestamp, ra_offset, dec_offset, mjd, filter, exp_time, comment, ra, dec, ra_offset_sig, dec_offset_sig, boresite_ang, position_ang, exp_name, alt, az, exp_id, cam_label] = row; 190 212 191 213 return [ 192 214 parseFloat(mjd), // MJD 193 215 parseFloat(ra_offset), // RA_offset (AST_R0) 194 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment ,216 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment+"<br>cam_label: "+cam_label, 195 217 parseFloat(dec_offset), // Dec_offset (AST_D0) 196 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment ,218 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment+"<br>cam_label: "+cam_label, 197 219 20, // Dummy value for 20 TP unit 198 220 -20 // Dummy value for -20 TP unit … … 201 223 202 224 data.addRows(rows); 203 const options = { 204 title: 'Pointing Offset (MJD)', 225 226 // Extract the first MJD value from dataArray 227 //const firstMJD = dataArray.length > 0 ? parseFloat(dataArray[0][1]) : "N/A"; 228 const firstMJD = dataArray.length > 0 ? Math.floor(parseFloat(dataArray[0][3])) : "N/A"; 229 console.log("First MJD Value:", firstMJD); 230 231 const options = { 232 title: 'Pointing Offset (MJD: '+firstMJD+')', 205 233 titleTextStyle: {color: 'black', fontSize: 15}, 206 234 width: '100%', … … 230 258 } 231 259 232 233 260 // draw pointing scatter 234 261 function drawSIGChart() { … … 241 268 242 269 const rows = dataArray.map(row => { 243 const [timestamp, ra_offset, dec_offset, mjd, filter, exp_time, comment, ra, dec, ra_offset_sig, dec_offset_sig, boresite_ang, position_ang, exp_name, alt, az, exp_id ] = row;270 const [timestamp, ra_offset, dec_offset, mjd, filter, exp_time, comment, ra, dec, ra_offset_sig, dec_offset_sig, boresite_ang, position_ang, exp_name, alt, az, exp_id, cam_label] = row; 244 271 245 272 return [ 246 273 parseFloat(mjd), // MJD 247 274 parseFloat(ra_offset_sig), // RA_offset_scatter (AST_RS) 248 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment ,275 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment+"<br>cam_label: "+cam_label, 249 276 parseFloat(dec_offset_sig), // Dec_offset_scatter (AST_DS) 250 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment ,277 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment+"<br>cam_label: "+cam_label, 251 278 ]; 252 279 }); … … 294 321 295 322 const rows = dataArray.map(row => { 296 const [timestamp, ra_offset, dec_offset, mjd, filter, exp_time, comment, ra, dec, ra_offset_sig, dec_offset_sig, boresite_ang, position_ang, exp_name, alt, az, exp_id ] = row;323 const [timestamp, ra_offset, dec_offset, mjd, filter, exp_time, comment, ra, dec, ra_offset_sig, dec_offset_sig, boresite_ang, position_ang, exp_name, alt, az, exp_id, cam_label] = row; 297 324 298 325 return [ 299 326 parseFloat(position_ang), // Position Angle 300 327 parseFloat(ra_offset), // RA_offset (AST_R0) 301 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment ,328 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment+"<br>cam_label: "+cam_label, 302 329 parseFloat(dec_offset), // Dec_offset (AST_D0) 303 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment ,330 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment+"<br>cam_label: "+cam_label, 304 331 ]; 305 332 }); … … 345 372 346 373 const rows = dataArray.map(row => { 347 const [timestamp, ra_offset, dec_offset, mjd, filter, exp_time, comment, ra, dec, ra_offset_sig, dec_offset_sig, boresite_ang, position_ang, exp_name, alt, az, exp_id ] = row;374 const [timestamp, ra_offset, dec_offset, mjd, filter, exp_time, comment, ra, dec, ra_offset_sig, dec_offset_sig, boresite_ang, position_ang, exp_name, alt, az, exp_id, cam_label] = row; 348 375 349 376 return [ 350 377 parseFloat(alt), // Position Angle 351 378 parseFloat(ra_offset), // RA_offset (AST_R0) 352 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment ,379 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment+"<br>cam_label: "+cam_label, 353 380 parseFloat(dec_offset), // Dec_offset (AST_D0) 354 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment ,381 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment+"<br>cam_label: "+cam_label, 355 382 ]; 356 383 }); … … 395 422 396 423 const rows = dataArray.map(row => { 397 const [timestamp, ra_offset, dec_offset, mjd, filter, exp_time, comment, ra, dec, ra_offset_sig, dec_offset_sig, boresite_ang, position_ang, exp_name, alt, az, exp_id ] = row;424 const [timestamp, ra_offset, dec_offset, mjd, filter, exp_time, comment, ra, dec, ra_offset_sig, dec_offset_sig, boresite_ang, position_ang, exp_name, alt, az, exp_id, cam_label] = row; 398 425 399 426 return [ 400 427 parseFloat(az), // Position Angle 401 428 parseFloat(ra_offset), // RA_offset (AST_R0) 402 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment ,429 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment+"<br>cam_label: "+cam_label, 403 430 parseFloat(dec_offset), // Dec_offset (AST_D0) 404 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment ,431 "expname: "+exp_name+"<br>exp_id: "+exp_id+"<br>timestamp: "+timestamp+"<br>RA: "+ra+"<br>DEC: "+dec+"<br>filter: "+filter+"<br>comment: "+comment+"<br>cam_label: "+cam_label, 405 432 ]; 406 433 });
Note:
See TracChangeset
for help on using the changeset viewer.
