Show
Ignore:
Timestamp:
12/15/2004 04:14:49 PM (7 years ago)
Author:
vieyra
Message:

Added the new user interface, and file select_other.php as an example
Added pow() method to Units class
Added function db_get_plot_single_values() which basically does the same as db_get_plot_values, but for multiple queries
Added "free" plot type to plot.php to make it compatible with the previous interface
Units are assigned it db_get_plot_single_values() for the properties
Broken Materials Categories in select_other.php
Broken Materials Map Selection in select_other.php
I suggest a better Unit handling class, this one is good but is rapidly falling short for our purposes

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/matml/webselector/php/dbquery.php.inc

    r121 r144  
    5454        else 
    5555            $mine[1].=$eirs[1]; 
     56        if(!$mine[1]) 
     57            $name=$mine[0]; 
     58        else 
     59            $name="$mine[0]/$mine[1]"; 
     60        $ret=new Unit( 
     61            "$name", 
     62            $this->num_name*$other->num_name, 
     63            $this->scale*$other->scale 
     64        ); 
     65        return $ret; 
     66    } 
     67    function pow($power) 
     68    { 
     69 
     70      // Write the actual POW function 
     71 
     72        $mine=$this->name_split(); 
     73 
     74 
     75      if( $power > 1){ 
     76        if($mine[0]) 
     77          { 
     78            $mine[0].="^$power"; 
     79          } 
     80        if($mine[1]) 
     81          { 
     82            $mine[1].="^$power"; 
     83          } 
     84      } 
     85      elseif($power == 1){ 
     86        //Do nothing 
     87      } 
     88      elseif( $power == 0){ 
     89 
     90        if($mine[0]) 
     91          { 
     92            $mine[0]="1"; 
     93          } 
     94        if($mine[1]) 
     95          { 
     96            $mine[1]="1"; 
     97          } 
     98      } 
     99      elseif($power == -1){ 
     100 
     101        if($mine[0]&&$mine[1]) 
     102          { 
     103            $temp   = $mine[0]; 
     104            $mine[0]= $mine[1]; 
     105            $mine[1]= $temp; 
     106          } 
     107        elseif($mine[1]&&!$mine[0]) 
     108          { 
     109            $mine[0]=$mine[1]; 
     110            $mine[1]=""; 
     111          } 
     112        elseif($mine[0]&&!$mine[1]) 
     113          { 
     114            $mine[1]=$mine[0]; 
     115            $mine[0]=1; 
     116          } 
     117 
     118 
     119      } 
     120      elseif($power < -1){       
     121 
     122 
     123                if($mine[0]&&$mine[1]) 
     124          { 
     125            $temp   = $mine[0]; 
     126            $mine[0]= "$mine[1]^".abs($power); 
     127            $mine[1]= "$temp^".abs($power); 
     128          } 
     129        elseif($mine[1]&&!$mine[0]) 
     130          { 
     131            $mine[0]="$mine[1]^".abs($power); 
     132            $mine[1]=""; 
     133          } 
     134        elseif($mine[0]&&!$mine[1]) 
     135          { 
     136            $mine[1]="$mine[0]^".abs($power); 
     137            $mine[0]=1; 
     138          } 
     139 
     140      } 
     141 
     142 
    56143        if(!$mine[1]) 
    57144            $name=$mine[0]; 
     
    160247       array_flip(array("Heat Capacity","Specific Heat")) 
    161248    ); 
     249    
    162250   $translation_string="\"abcdefghijklmnopqrstuvwxyz'\",'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"; 
    163251   $ret=array(); 
     
    235323        $ret[$key]=$data; 
    236324   } 
     325 
     326//    echo "<br><br>"; 
     327//    print_r($ret); 
     328 
    237329   return $ret; 
    238330} 
     
    385477    $handle = opendir('materials'); 
    386478 
     479 
     480//     echo "<br><br>Begin Query <br>"; 
     481//     print_r($query); 
     482//     echo "<br>End Query<br>"; 
     483     
     484 
    387485    while (false !== ($file = readdir($handle))) { 
    388486        if(preg_match("/\.xml?$/",$file)==1) 
     
    391489            $values=get_property_data("materials/$file",$query); 
    392490 
    393             if(isset($values["Xquery"])&& 
     491//          echo "<br><br>Begin Values <br>"; 
     492//          print_r($values); 
     493//          echo "End Values <br>"; 
     494 
     495 
     496            If(isset($values["Xquery"])&& 
    394497                isset($values["Yquery"]) 
    395498            ) 
     
    425528                        $names[]=$values["Matid"]; 
    426529                        $categories[]=$category; 
     530                         
    427531                } 
    428532            } 
     
    468572} 
    469573 
     574function db_get_plot_single_values($property_listx, $property_listy, $log, $category_options){  
     575 
     576    global $unit_infos; 
     577 
     578 
     579    // Prepare Array list 
     580 
     581 
     582     $query = array(); 
     583     $power = array(); 
     584     $NXqueries = array(); 
     585     $NYqueries = array(); 
     586 
     587     $xml_name = array( 
     588                        "Density" => "Density", 
     589                        "E"       => "Young's Modulus", 
     590                        "Cp"      => "Heat Capacity", 
     591                        "K"       => "Thermal Conductivity", 
     592                        "YS"      => "Yield Strength" 
     593                        ); 
     594 
     595 
     596     $prop_units = array( 
     597                         "Density" => $unit_infos["g"]->div($unit_infos["cc"]), 
     598                         "E"       => $unit_infos["MPa"], 
     599                         "YS"      => $unit_infos["MPa"], 
     600                         "Cp"      => $unit_infos["J"]->div($unit_infos["g"]->mul($unit_infos["°C"])), 
     601                         "K"      => $unit_infos["W"]->div($unit_infos["m"]->mul($unit_infos["K"])), 
     602                         ); 
     603 
     604    $index = 0; 
     605    $xlabel_num =""; 
     606    $ylabel_num =""; 
     607    $xlabel_den =""; 
     608    $ylabel_den =""; 
     609 
     610    foreach( $property_listx as $property=>$pow){ 
     611      $index++; 
     612      $query["Xquery$index"]="$xml_name[$property]"; 
     613      $power["Xquery$index"]= $pow; 
     614      $final_units["Xquery$index"] = $prop_units["$property"]; 
     615 
     616      if( $pow > 1){ 
     617        $xlabel_num = "$xml_name[$property]^$pow *"; 
     618      } 
     619      elseif($pow == 1){ 
     620        $xlabel_num = "$xml_name[$property]*"; 
     621      } 
     622      elseif($pow == -1){ 
     623        $xlabel_den = "$xml_name[$property]*"; 
     624      } 
     625      elseif($pow < -1){       
     626        $xlabel_den = "$xml_name[$property]^".abs($pow)."*"; 
     627      } 
     628 
     629      array_push($NXqueries, "Xquery$index"); 
     630    } 
     631 
     632    $index = 0; 
     633     
     634 
     635    foreach( $property_listy as $property=>$pow){ 
     636      $index++; 
     637      $query["Yquery$index"]="$xml_name[$property]"; 
     638      $power["Yquery$index"]= $pow; 
     639      $final_units["Yquery$index"] = $prop_units["$property"]; 
     640 
     641      if( $pow > 1){ 
     642        $ylabel_num = "$xml_name[$property]^$pow *"; 
     643      } 
     644      elseif($pow == 1){ 
     645        $ylabel_num = "$xml_name[$property]*"; 
     646      } 
     647      elseif($pow == -1){ 
     648        $ylabel_den = "$xml_name[$property]*"; 
     649      } 
     650      elseif($pow < -1){       
     651        $ylabel_den = "$xml_name[$property]^".abs($pow)."*"; 
     652      } 
     653       
     654      array_push($NYqueries, "Yquery$index"); 
     655    } 
     656 
     657    $ALLqueries = array_merge($NXqueries,$NYqueries); 
     658 
     659    // Prepare final units 
     660  
     661 
     662    $first = 0; 
     663    foreach($NXqueries as $Nquery){ 
     664       
     665      if($first){ 
     666        $Xunits =  $Xunits->mul($final_units["$Nquery"]->pow($power["$Nquery"])); 
     667      } 
     668      else{ 
     669        $Xunits = $final_units["$Nquery"]->pow($power["$Nquery"]); 
     670        $first = 1; 
     671      } 
     672 
     673    } 
     674 
     675    $first = 0; 
     676    foreach($NYqueries as $Nquery){ 
     677       
     678      if($first){ 
     679        $Yunits =  $Yunits->mul($final_units["$Nquery"]->pow($power["$Nquery"])); 
     680      } 
     681      else{ 
     682        $Yunits = $final_units["$Nquery"]->pow($power["$Nquery"]); 
     683        $first = 1; 
     684      } 
     685 
     686    } 
     687 
     688 
     689 
     690    // Prepare final labels 
     691 
     692    $xlabel_num = substr($xlabel_num,0,-1); 
     693    $xlabel_den = substr($xlabel_den,0,-1); 
     694    $ylabel_num = substr($ylabel_num,0,-1); 
     695    $ylabel_den = substr($ylabel_den,0,-1); 
     696 
     697    $xlabel_num = ($xlabel_num != "")?"$xlabel_num":1; 
     698    $ylabel_num = ($ylabel_num != "")?"$ylabel_num":1; 
     699 
     700    $xlabel = ($xlabel_den != "")?"$xlabel_num / $xlabel_den":"$xlabel_num"; 
     701    $ylabel = ($ylabel_den != "")?"$ylabel_num / $ylabel_den":"$ylabel_num"; 
     702 
     703    $xlabel .= " (".$Xunits->name.")"; 
     704    $ylabel .= " (".$Yunits->name.")"; 
     705 
     706 
     707  $query["categories"]="Material Categories"; 
     708   
     709    $valuesY = array(); 
     710    $valuesX = array(); 
     711    $valuese = array(); 
     712    $categories = array(); 
     713   
     714    $handle = opendir('materials'); 
     715 
     716//          echo "<br><br>Begin Query <br>"; 
     717//          print_r($query); 
     718//          echo "End Query<br>"; 
     719 
     720 
     721 
     722    while (false !== ($file = readdir($handle))) { 
     723        if(preg_match("/\.xml?$/",$file)==1) 
     724        { 
     725            // Fetch values from DB and sort them in an array (actually 3 arrays) 
     726            $values=get_property_data("materials/$file",$query); 
     727 
     728 
     729//          echo "<br><br>Begin Values <br>"; 
     730//          print_r($values); 
     731//          echo "End Values <br>"; 
     732 
     733             
     734             
     735            // If isset (for all values) 
     736 
     737            $allset = 1; 
     738 
     739            foreach( $ALLqueries as $Nquery){ 
     740              if(isset($values["$Nquery"])) 
     741                $allset *= 1; 
     742                 else 
     743                   $allset *= 0; 
     744            } 
     745 
     746 
     747            if( $allset ) 
     748            { 
     749 
     750              // Category part, deal with it later 
     751                $values_categories=$values["categories"]; 
     752                $values_categories[]=""; 
     753                foreach($values_categories as $category) 
     754                { 
     755                    if(isset($category_options[$category])) 
     756                        break; 
     757                } 
     758                if(!isset($category_options[$category])) 
     759                    continue; 
     760                $category=$category_options[$category]; 
     761                // Category part, deal with it later 
     762                 
     763 
     764 
     765 
     766                //Force unit match for all queries 
     767 
     768                foreach( $NXqueries as $Nquery){ 
     769                  force_unit_match($values["Matid"],$final_units["$Nquery"],$values["$Nquery"]); 
     770                } 
     771 
     772                foreach( $NYqueries as $Nquery){ 
     773                  force_unit_match($values["Matid"],$final_units["$Nquery"],$values["$Nquery"]); 
     774                } 
     775 
     776                //Scale units 
     777                //and add them to the array 
     778 
     779                $cont = 1; 
     780 
     781                // And the Power? 
     782 
     783                foreach( $NXqueries as $Nquery){ 
     784                  $cont *= ( pow($values["$Nquery"]->avg_value,$power["$Nquery"]) /$final_units["$Nquery"]->scale); 
     785                } 
     786                $valuesX[]=$cont; 
     787                   
     788                $cont = 1; 
     789 
     790                foreach( $NYqueries as $Nquery){ 
     791                  $cont *= ( pow($values["$Nquery"]->avg_value,$power["$Nquery"]) /$final_units["$Nquery"]->scale); 
     792                } 
     793                $valuesY[]=$cont; 
     794 
     795                 
     796//              print_r($valuesX); 
     797//              echo "<br>"; 
     798//              print_r($valuesY); 
     799//              echo "<br>"; 
     800                 
     801 
     802                // Add Matid 
     803                $names[]=$values["Matid"]; 
     804                 
     805                // Something else for category 
     806                $categories[]=$category; 
     807 
     808            } 
     809        } 
     810    } 
     811    closedir($handle); 
     812   
     813 
     814    //assing label 
     815 
     816//     $ylabel = "$property_listy[0]"; 
     817//     $xlabel = "$property_listx[0]"; 
     818 
     819  
     820 
     821    return array(&$valuesX, &$valuesY, &$names, $xlabel, $ylabel, $categories); 
     822 
     823} 
     824 
     825 
     826 
     827 
     828 
    470829//var_dump(db_get_plot_values("EvsD",""));  
    471830?>