001/* 002 * Copyright (c) 2002-2010 The Regents of the University of California. 003 * All rights reserved. 004 * 005 * '$Author: welker $' 006 * '$Date: 2010-05-06 05:21:26 +0000 (Thu, 06 May 2010) $' 007 * '$Revision: 24234 $' 008 * 009 * Permission is hereby granted, without written agreement and without 010 * license or royalty fees, to use, copy, modify, and distribute this 011 * software and its documentation for any purpose, provided that the above 012 * copyright notice and the following two paragraphs appear in all copies 013 * of this software. 014 * 015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY 016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF 018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF 019 * SUCH DAMAGE. 020 * 021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, 022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE 024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF 025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, 026 * ENHANCEMENTS, OR MODIFICATIONS. 027 * 028 */ 029 030package org.geon; 031 032import java.awt.Point; 033import java.util.Map; 034import java.util.Set; 035import java.util.TreeMap; 036import java.util.TreeSet; 037 038////////////////////////////////////////////////////////////////////////// 039////RockSample 040/** 041 * @author Efrat Jaeger 042 * @version $Id: RockSample.java 24234 2010-05-06 05:21:26Z welker $ 043 * @since Ptolemy II 3.0.2 044 */ 045public class RockSample { 046 047 private static Set minerals = new TreeSet(); 048 049 static { 050 051 minerals.add("quartz"); 052 minerals.add("k-feldspar"); 053 minerals.add("microcline"); 054 minerals.add("plagioclase"); 055 minerals.add("biotite"); 056 minerals.add("muscovite"); 057 minerals.add("amphibole"); 058 minerals.add("olivine"); 059 minerals.add("epidote"); 060 minerals.add("allanite"); 061 minerals.add("garnet"); 062 minerals.add("clinopyroxene"); 063 minerals.add("orthopyroxene"); 064 minerals.add("ilmenite"); 065 minerals.add("magnetite"); 066 minerals.add("opaques"); 067 minerals.add("zircon"); 068 minerals.add("apatite"); 069 minerals.add("carbonate"); 070 minerals.add("hornblende"); 071 minerals.add("magnesio-hornblende"); 072 minerals.add("paragasitic-hornblende"); 073 } 074 075 private String id; 076 private Map data = new TreeMap(); 077 078 // add a mineral into this record 079 public void add(String att, String val) { 080 att = att.toLowerCase().replaceAll("_", "-"); 081 if (att.equals("ssid")) { 082 id = val; 083 data.put(att, val); 084 } else if (minerals.contains(att)) { 085 if (val.equals("") || val.equals("tr")) { 086 data.put(att, new Float(0)); 087 } else { 088 data.put(att, new Float(Float.parseFloat(val))); 089 } 090 } 091 } 092 093 public float get(String att) { 094 att = att.toLowerCase().replaceAll("_", "-"); 095 if (att.equals("ssid")) { 096 return Float.parseFloat(id); 097 } else if (!minerals.contains(att)) { 098 return 0; 099 } else { 100 return ((Float) data.get(att)).floatValue(); 101 } 102 } 103 104 private float getQ() { 105 return ((Float) data.get("quartz")).floatValue(); 106 } 107 108 private float getA() { 109 return ((Float) data.get("k-feldspar")).floatValue() 110 + ((Float) data.get("microcline")).floatValue(); 111 } 112 113 private float getP() { 114 115 return ((Float) data.get("plagioclase")).floatValue(); 116 } 117 118 private float getM() { 119 return ((Float) data.get("biotite")).floatValue() 120 + ((Float) data.get("muscovite")).floatValue() 121 + ((Float) data.get("amphibole")).floatValue() 122 + ((Float) data.get("olivine")).floatValue() 123 + ((Float) data.get("epidote")).floatValue() 124 + ((Float) data.get("allanite")).floatValue() 125 + ((Float) data.get("garnet")).floatValue() 126 + ((Float) data.get("clinopyroxene")).floatValue() 127 + ((Float) data.get("orthopyroxene")).floatValue() 128 + ((Float) data.get("ilmenite")).floatValue() 129 + ((Float) data.get("magnetite")).floatValue() 130 + ((Float) data.get("opaques")).floatValue() 131 + ((Float) data.get("zircon")).floatValue() 132 + ((Float) data.get("apatite")).floatValue() 133 + ((Float) data.get("carbonate")).floatValue(); 134 } 135 136 public boolean isFelsic() { 137 138 float p = getP(); 139 float a = getA(); 140 float q = getQ(); 141 float m = getM(); 142 143 if (m / (p + a + q + m) < 0.9) { 144 return true; 145 } else { 146 return false; 147 } 148 } 149 150 public boolean isUltramafic() { 151 return !isFelsic(); 152 } 153 154 public String getId() { 155 return id; 156 } 157 158 public Point getPointForGabbroOlivine(int leftPadding, int topPadding, 159 int diagramWidth, int diagramHeight, int layer) { 160 161 float X = 0, Y = 0; 162 163 if (layer == 1) { 164 float plagValue = getP(); 165 float quartzValue = getQ(); 166 float alakaliValue = getA(); 167 168 float sum = plagValue + quartzValue + alakaliValue; 169 170 X = plagValue / sum; 171 Y = quartzValue / sum; 172 // alakaliValue = alakaliValue / sum; 173 } else if (layer == 2) { 174 // System.out.println("HERE!!!"); 175 float plagValue = ((Float) data.get("plagioclase")).floatValue(); 176 float olValue = ((Float) data.get("olivine")).floatValue(); 177 float cpxValue = ((Float) data.get("clinopyroxene")).floatValue(); 178 float opxValue = ((Float) data.get("orthopyroxene")).floatValue(); 179 180 /* 181 * System.out.println("diagramWidth: " + diagramWidth); 182 * System.out.println("plagValue: " + plagValue); 183 * System.out.println("olValue: " + olValue); 184 * System.out.println("cpxValue: " + cpxValue); 185 * System.out.println("opxValue: " + opxValue); 186 */ 187 float pxValue = cpxValue + opxValue; 188 float sum = plagValue + olValue + pxValue; 189 190 // System.out.println("sum: " + sum); 191 192 Y = plagValue / sum; 193 X = olValue / sum; 194 195 // System.out.println("X: " + X + " , Y:" + Y); 196 197 // pxValue = pxValue /sum; 198 } 199 // calculate x and y coordinates 200 int x1 = leftPadding + (int) (X * diagramWidth); 201 int y1 = topPadding + diagramHeight; 202 203 int y0 = topPadding + (int) ((1 - Y) * diagramHeight); 204 int x0 = x1 + (y1 - y0) / 2; 205 206 // System.out.println("x1 = " + x1 + " , y1 = " + y1 + " , x0 = " + x0 + 207 // " , y0 = " + y0); 208 209 return new Point(x0, y0); 210 211 } 212 213}