001 package cnslab.gui; 002 003 import java.io.*; 004 import java.util.*; 005 006 import ucar.ma2.ArrayChar; 007 import ucar.nc2.Dimension; 008 import ucar.nc2.Variable; 009 import thinlet.Thinlet; 010 011 import cnslab.cnsnetwork.PlotResult; 012 013 /*********************************************************************** 014 * @version 015 * $Date$ 016 * $Rev$ 017 * $Author$ 018 * @author 019 * Yi Dong 020 * @author 021 * David Wallace Croft, M.Sc. 022 * @author 023 * Jeremy Cohen 024 ***********************************************************************/ 025 public final class ContentProcessResult 026 implements Runnable 027 //////////////////////////////////////////////////////////////////////// 028 //////////////////////////////////////////////////////////////////////// 029 { 030 031 private final Thinlet thinlet; 032 033 //////////////////////////////////////////////////////////////////////// 034 //////////////////////////////////////////////////////////////////////// 035 036 public ContentProcessResult ( final Thinlet thinlet ) 037 //////////////////////////////////////////////////////////////////////// 038 { 039 this.thinlet = thinlet; 040 } 041 042 //////////////////////////////////////////////////////////////////////// 043 //////////////////////////////////////////////////////////////////////// 044 045 @Override 046 public void run ( ) 047 //////////////////////////////////////////////////////////////////////// 048 { 049 final File dir = new File ( "results" ); 050 051 final FilenameFilter 052 filter = new FilenameFilter ( ) 053 { 054 @Override 055 public boolean accept ( 056 final File dirFile, 057 final String name ) 058 { 059 return name.endsWith ( ".nc" ) || name.endsWith ( ".NC" ); 060 } 061 }; 062 063 //System.out.println(thin.getCount(thin.find("xmlModles"))); 064 065 final String [ ] children = dir.list ( filter ); 066 067 if ( children != null 068 && thinlet.getCount ( thinlet.find ( "resultsCombo" ) ) 069 != children.length ) 070 { 071 Arrays.sort ( children ); 072 073 thinlet.removeAll ( thinlet.find ( "resultsCombo" ) ); 074 075 //System.out.println("files:" +children.length); 076 077 for( int i = 0; i < children.length; i++ ) 078 { 079 // System.out.println("file:"+children[i]); 080 081 final Object o = Thinlet.create ( "choice" ); 082 083 thinlet.setString ( 084 o, 085 "text", 086 children [ i ] ); 087 088 thinlet.add ( 089 thinlet.find ( "resultsCombo" ), 090 o); 091 } 092 } 093 094 if ( thinlet.getSelectedItem ( thinlet.find ( "resultsCombo" ) ) 095 != null ) 096 { 097 try 098 { 099 thinlet.removeAll ( thinlet.find ( "eleList" ) ); 100 101 final String 102 fileName = thinlet.getString ( 103 thinlet.getSelectedItem ( thinlet.find ( "resultsCombo" ) ), 104 "text" ); 105 106 //System.out.println(fileName); 107 108 // TODO: Why is this not used? 109 final PlotResult pr = new PlotResult ( "test" ); 110 111 PlotResult.init ( "results/" + fileName ); 112 113 //System.out.println(pr.numExp); 114 115 final Dimension 116 exp = PlotResult.ncfile.findDimension ( "suEleId" ); 117 118 for ( int i = 0; i < PlotResult.numExp; i++ ) 119 { 120 // Subexperiment node 121 122 final Object o = Thinlet.create ( "node" ); 123 124 thinlet.setString ( 125 o, 126 "text", 127 PlotResult.subexpNames.getString ( i ) ); 128 129 // Single Unit node 130 131 if ( exp != null ) 132 { 133 final Object su = Thinlet.create ( "node" ); 134 135 thinlet.setString ( 136 su, 137 "text", 138 "Single Unit" ); 139 140 thinlet.setBoolean ( 141 su, 142 "expanded", 143 false ); 144 145 final Variable 146 v = PlotResult.ncfile.findVariable ( "suNames" ); 147 148 final ArrayChar.D2 suNames = ( ArrayChar.D2 ) v.read ( ); 149 150 // System.out.println(names.getString(0)); 151 152 final int [ ] varShape = v.getShape ( ); 153 154 // TODO: Why is this not used? 155 final int suSeries = varShape [ 0 ]; 156 157 // System.out.println(varShape[0]+" "+varShape[1]); 158 159 for ( int eleId = 0; eleId < varShape [ 0 ]; eleId++ ) 160 { 161 final Object su_item = Thinlet.create ( "node" ); 162 163 thinlet.setString ( 164 su_item, 165 "text", 166 suNames.getString ( eleId ) ); 167 168 thinlet.setString ( 169 su_item, 170 "name", 171 i + ",0," + eleId ); 172 173 thinlet.add ( 174 su, 175 su_item ); 176 } 177 178 thinlet.add ( 179 o, 180 su); 181 } 182 183 // Mu node 184 185 Variable v = PlotResult.ncfile.findVariable ( "muNames" ); 186 187 if ( v != null ) 188 { 189 final ArrayChar.D2 suNames = ( ArrayChar.D2 ) v.read ( ); 190 191 // System.out.println(names.getString(0)); 192 193 final int [ ] varShape = v.getShape ( ); 194 195 // TODO: Why is this not used? 196 final int suSeries = varShape [ 0 ]; 197 198 // suNames.getString(i); 199 200 final Object mu = Thinlet.create ( "node" ); 201 202 thinlet.setString ( 203 mu, 204 "text", 205 "Multiple Unit" ); 206 207 thinlet.setBoolean ( 208 mu, 209 "expanded", 210 false ); 211 212 for ( int eleId = 0; eleId < varShape [ 0 ]; eleId++ ) 213 { 214 final Object mu_item = Thinlet.create ( "node" ); 215 216 thinlet.setString ( 217 mu_item, 218 "text", 219 suNames.getString ( eleId ) ); 220 221 thinlet.setString ( 222 mu_item, 223 "name", 224 i + ",1," + eleId ); 225 226 thinlet.add ( 227 mu, 228 mu_item ); 229 } 230 231 thinlet.add ( 232 o, 233 mu ); 234 } 235 236 // Field node 237 238 if ( PlotResult.numField > 0 ) 239 { 240 v = PlotResult.ncfile.findVariable ( "fieldNames" ); 241 242 final ArrayChar.D2 fieldNames = ( ArrayChar.D2 ) v.read ( ); 243 244 final Object field = Thinlet.create ( "node" ); 245 246 thinlet.setString ( 247 field, 248 "text", 249 "Field" ); 250 251 thinlet.setBoolean ( 252 field, 253 "expanded", 254 false ); 255 256 for ( int ii = 0; ii < PlotResult.numField; ii++ ) 257 { 258 final Object fie_item = Thinlet.create ( "node" ); 259 260 thinlet.setString ( 261 fie_item, 262 "text", 263 fieldNames.getString ( ii ) ); 264 265 thinlet.setString ( 266 fie_item, 267 "name", 268 i + ",2," + ii ); 269 270 thinlet.add ( 271 field, 272 fie_item ); 273 } 274 275 thinlet.add ( 276 o, 277 field ); 278 } 279 280 // Vector node 281 282 if ( PlotResult.numVector > 0 ) 283 { 284 v = PlotResult.ncfile.findVariable ( "vectorNames" ); 285 286 final ArrayChar.D2 vectorNames = ( ArrayChar.D2 ) v.read ( ); 287 288 final Object vector = Thinlet.create ( "node" ); 289 290 thinlet.setString ( 291 vector, 292 "text", 293 "Vector" ); 294 295 thinlet.setBoolean ( 296 vector, 297 "expanded", 298 false ); 299 300 for ( int ii = 0; ii < PlotResult.numVector; ii++ ) 301 { 302 final Object fie_item = Thinlet.create ( "node" ); 303 304 thinlet.setString ( 305 fie_item, 306 "text", 307 vectorNames.getString ( ii ) ); 308 309 thinlet.setString ( 310 fie_item, 311 "name", 312 i + ",3," + ii ); 313 314 thinlet.add ( 315 vector, 316 fie_item ); 317 } 318 319 thinlet.add ( 320 o, 321 vector ); 322 } 323 324 // Intracellular node 325 326 if ( PlotResult.numIntra > 0 ) 327 { 328 v = PlotResult.ncfile.findVariable ( "intraNames" ); 329 330 final ArrayChar.D2 intraNames = ( ArrayChar.D2 ) v.read ( ); 331 332 final Object intra = Thinlet.create ( "node" ); 333 334 thinlet.setString ( 335 intra, 336 "text", 337 "Intracellular" ); 338 339 thinlet.setBoolean ( 340 intra, 341 "expanded", 342 false ); 343 344 for ( int ii = 0; ii < PlotResult.numIntra; ii++ ) 345 { 346 final Object intra_item = Thinlet.create ( "node" ); 347 348 thinlet.setString ( 349 intra_item, 350 "text", 351 intraNames.getString ( ii ) ); 352 353 thinlet.setString ( 354 intra_item, 355 "name", 356 i + ",4," + ii ); 357 358 thinlet.add ( 359 intra, 360 intra_item ); 361 } 362 363 thinlet.add ( 364 o, 365 intra ); 366 } 367 368 thinlet.add ( thinlet.find ( "eleList" ), o ); 369 } 370 371 372 373 /* 374 if ( out.equals ( "" ) ) 375 { 376 thin.setString ( 377 thin.find ( "simStatusDisplay" ), 378 "text", 379 thin.getString ( 380 thin.getSelectedItem ( thin.find ( "xmlModles" ) ), 381 "text" ) + " ...OK!\n" ); 382 383 thin.setBoolean ( 384 thin.find ( "startSim" ), 385 "enabled", 386 true ); 387 388 thin.setBoolean ( 389 thin.find ( "stopSim" ), 390 "enabled", 391 false ); 392 } 393 else 394 { 395 thin.setString ( 396 thin.find ( "simStatusDisplay" ), 397 "text", 398 thin.getString ( 399 thin.getSelectedItem ( thin.find ( "xmlModles" ) ), 400 "text" ) 401 + " ...Error!\n" + out ); 402 403 thin.setBoolean ( 404 thin.find( "startSim" ), 405 "enabled", 406 false ); 407 408 thin.setBoolean ( 409 thin.find ( "stopSim" ), 410 "enabled", 411 false ); 412 } 413 */ 414 415 PlotResult.stop ( ); 416 } 417 catch ( final Exception e ) 418 { 419 e.printStackTrace ( ); 420 } 421 } 422 } 423 424 //////////////////////////////////////////////////////////////////////// 425 //////////////////////////////////////////////////////////////////////// 426 }