IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 25, 2025, 4:08:45 PM (14 months ago)
Author:
cclin33
Message:

update czar plot code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippMonitor/raw/pointing.php

    r42790 r42795  
    2222
    2323// Fetch data based on range selection
    24 $range = isset($_GET['range']) ? $_GET['range'] : 'week';
     24$range = isset($_GET['range']) ? $_GET['range'] : 'yday';
    2525
    2626echo "<table border=\"0\">";
     
    2929echo "    <h1 align=\"middle\">Pointing Report</h1>";
    3030echo "  <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> | ';
     31echo '    <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=yday">Last night (default)</a> | ';
     32echo '    <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=day">Today (MJD '.getMJD().')</a> | ';
     33echo '    <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=week">Past 7 days</a> | ';
     34echo '    <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=month">Past 30 days</a> | ';
     35echo '    <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=year">Past 365 days</a> | ';
     36echo '    <a href="?pass=' . urlencode($pass) . '&proj=' . urlencode($proj) . '&range=all">All </a>   ';
    3537echo "  </td>";
    3638echo "</tr>";
    3739echo "</table>";
    38 echo getDataQuality($projectdb, $range);
     40echo getPointing($projectdb, $range);
    3941
    4042menu_end();
     
    5153#
    5254###########################################################################
    53 function getDataQuality($db, $range = 'week') {
     55function getPointing($db, $range = 'yday') {
    5456    // Start timer
    5557    $start = microtime(true);
     
    6163
    6264    // 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;
    6981    }
    7082
    7183    // 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'";
    7485    $result = $db->query($expIdQuery);
    7586
    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);
    7892
    7993    if (!empty($row['min_exp_id'])) {
    8094        $min_exp_id = $row['min_exp_id'];
    81         echo "Minimum exp_id: " . $min_exp_id;
     95    //    echo "Minimum exp_id: " . $min_exp_id;
    8296    } else {
    8397        echo "No results found.";
    8498    }
    8599
    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
    108132    $sql = "select * from (SELECT SUBTIME(dateobs, '10:00:00') AS time, AST_R0, AST_D0,
    109133                   round(( 367*YEAR(dateobs)- FLOOR((7 * (YEAR(dateobs) + FLOOR((MONTH(dateobs) + 9) / 12))) / 4) + FLOOR(275 * MONTH(dateobs) / 9)
    110134                   + 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
    112136            FROM rawExp
    113137            JOIN chipRun USING (exp_id)
     
    126150        return;
    127151    }
    128         echo "$sql<br><br>\n";
     152    //    echo "$sql<br><br>\n";
    129153   
    130154    while ($qry->fetchInto($row)) {
     
    134158    // Ensure $DQarray is not empty
    135159    if (empty($DQarray)) {
    136         echo "<b>Error:</b> Data array is empty.";
     160        echo "<center><b> No data for MJD: $mjdDay </b></center>";
    137161        return; // Stop execution if no data to encode
    138162    }
     
    147171   
    148172    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);
     173echo <<<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();
    168181        }
     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    }
    169191</script>
    170192
     
    187209
    188210        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;
    190212
    191213            return [
    192214                parseFloat(mjd),               // MJD
    193215                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,
    195217                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,
    197219                20,                            // Dummy value for 20 TP unit
    198220                -20                            // Dummy value for -20 TP unit
     
    201223
    202224        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+')',
    205233            titleTextStyle: {color: 'black', fontSize: 15},
    206234            width: '100%',
     
    230258    }
    231259
    232 
    233260    // draw pointing scatter
    234261    function drawSIGChart() {
     
    241268
    242269        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;
    244271
    245272            return [
    246273                parseFloat(mjd),               // MJD
    247274                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,
    249276                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,
    251278            ];
    252279        });
     
    294321
    295322        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;
    297324
    298325            return [
    299326                parseFloat(position_ang),      // Position Angle
    300327                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,
    302329                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,
    304331            ];
    305332        });
     
    345372
    346373        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;
    348375
    349376            return [
    350377                parseFloat(alt),      // Position Angle
    351378                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,
    353380                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,
    355382            ];
    356383        });
     
    395422
    396423        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;
    398425
    399426            return [
    400427                parseFloat(az),      // Position Angle
    401428                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,
    403430                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,
    405432            ];
    406433        });
Note: See TracChangeset for help on using the changeset viewer.