[HepData-svn] r1378 - trunk/hepdata-webapp/src/main/java/cedar/hepdata/formats

blackhole at projects.hepforge.org blackhole at projects.hepforge.org
Wed Aug 11 17:22:25 BST 2010


Author: whalley
Date: Wed Aug 11 17:22:25 2010
New Revision: 1378

Log:
new trial bdms formatter

Modified:
   trunk/hepdata-webapp/src/main/java/cedar/hepdata/formats/BdmsFormatter.java

Modified: trunk/hepdata-webapp/src/main/java/cedar/hepdata/formats/BdmsFormatter.java
==============================================================================
--- trunk/hepdata-webapp/src/main/java/cedar/hepdata/formats/BdmsFormatter.java	Wed Aug 11 17:18:16 2010	(r1377)
+++ trunk/hepdata-webapp/src/main/java/cedar/hepdata/formats/BdmsFormatter.java	Wed Aug 11 17:22:25 2010	(r1378)
@@ -15,7 +15,6 @@
     public static String format(Paper p) {
         if(p == null) return null;
 	StringBuffer s = new StringBuffer();
-	s.append("BDMS output:\n\n");
 	s.append("SC = " + p.getShortName() + ";" + "     RED = " + p.getRedId() + ";\n");
 
         for (int n=1; n<4; n++){
@@ -46,28 +45,184 @@
         if(p.getSpiresId()!=null) s.append("IRN = " + p.getSpiresId() + ";\n");
 
         for (Dataset ds : p.getDatasets()){
-            s.append("\n" + ds.getTfpString() + "\n");
+        	StringBuffer h = new StringBuffer();
+    
+            if(ds.getTfpString() != null){ 
+                h.append(ds.getTfpString().replace("Location: ","") + "\n"); 
+            }
+            String yn = "";
             for (int n=1; ; n++){
-	            if(ds.getCommentString(n) != null){ s.append(ds.getCommentString(n) + "\n"); }
+	            if(ds.getCommentString(n) != null){ h.append(ds.getCommentString(n) + "\n"); }
 	            else{ break; }	
             }
             for (int n=1; ; n++){
-	            if(ds.getDsReactionString(n) != null){ s.append(ds.getDsReactionString(n) + "\n"); }
+	            if(ds.getDsReactionString(n) != null){ h.append(ds.getDsReactionString(n) + "\n"); }
 	            else{ break; }	
             }
             for (int n=1; ; n++){
-	            if(ds.getDsObservableString(n) != null){ s.append(ds.getDsObservableString(n) + "\n"); }
+	            if(ds.getDsObservableString(n) != null){ h.append(ds.getDsObservableString(n) + "\n"); }
 	            else{ break; }	
             }
             for (int n=1; ; n++){
-	            if(ds.getDsPlabString(n) != null){ s.append(ds.getDsPlabString(n) + "\n"); }
+	            if(ds.getDsPlabString(n) != null){ h.append(ds.getDsPlabString(n) + "\n"); }
 	            else{ break; }	
             }
-            s.append("\n" + ds.getXAxes().size() + "\n");
-            s.append("\n" + ds.getYAxes().size() + "\n");
+            
+            s.append("\n" + h.toString());
+            int numpoints = ds.getNumPoints(); 
+            int idmax = ds.getMaxPointId();             
+            int nyax = ds.getYAxes().size();
+            int nxax = ds.getXAxes().size();
+            if(nyax > 0 && nxax > 0) {
+                int nycomm = ds.getYAxis(1).getComments().size();
+                int nyprop = ds.getYAxis(1).getProperties().size();;
+                for ( Property prop : ds.getYAxis(1).getProperties()){
+                    if(prop.getName().startsWith("sqrts")){ nyprop--; }
+                }
+                for (Property prop : ds.getProperties()){
+                    s.append("N = " + prop.getName() + " IN " + prop.getUnit().toString().toUpperCase());
+                    if(prop.getLowValue().equals(prop.getHighValue())){
+                        s.append("; V = " + prop.getLowValue() +  ";\n");
+                    } else{
+                        s.append("; V = " + prop.getLowValue() + " TO " + prop.getHighValue() + ";\n");
+                    }
+                }
+                
+                String[][] store = new String[nyax][nycomm+nyprop+1];
+                int nyhead=0;
+                for (int n=0; n<nyax; n++){
+                    List <String> storelist = new ArrayList();
+                    
+                    YAxis yax = ds.getYAxis(n+1);
+                    String yheader = "";
+                    if(yax.getHeader() != null){ 
+                        yheader = yax.getHeader(); 
+                        storelist.add("N = YN;  V = " + yheader + ";\n");
+                        nyhead=1;
+                    }
+                
+                   for (String comm : yax.getComments()){
+                       if(comm.contains(":")){
+                     	StringBuffer tempbuff = new StringBuffer();
+                        String left = comm.split("\\s*:\\s*")[0];
+                        String right = comm.split("\\s*:\\s*")[1];
+                        tempbuff.append("N = " + left + "; V = " + right + ";\n");
+                        storelist.add(tempbuff.toString());
+                       } else{
+                           nycomm =- 1;
+                       }
+                    }
+                    for (Property prop : yax.getProperties()){
+                        if(!prop.getName().startsWith("sqrts")){
+                     	    StringBuffer tempbuff = new StringBuffer();
+                            tempbuff.append("N = " + prop.getName().trim());
+                            if(!prop.getUnit().toString().equals("num")) { tempbuff.append(" IN " + prop.getUnit().toString().toUpperCase()); } 
+                            if(prop.getLowValue().equals(prop.getHighValue())){
+                                tempbuff.append("; V = " + prop.getLowValue() + ";\n");
+                            } else{
+                                tempbuff.append("; V = " + prop.getLowValue() + " TO " + prop.getHighValue() + ";\n");
+                            } 
+                            storelist.add(tempbuff.toString());
+                        }    
+                    }
+                    Collections.sort(storelist);
+                    for (int i=0; i<storelist.size(); i++){
+                        store[n][i]=storelist.get(i);
+                    }
+                }
+                 // now check each property etc. for repetition across yaxes (very simple case first)
+                for (int i=0; i<nyprop+nycomm+nyhead; i++){
+                    Boolean same = true;
+                    if(nyax > 1){
+                        for (int ny=0; ny<nyax-1; ny++){
+                           if(!store[ny][i].equals(store[ny+1][i])) { same = false; }
+                        }
+                    }
+                    if(same) { s.append(store[0][i]); }
+                    else{
+                        s.append(store[0][i]);
+                        for(int ny=1; ny<nyax; ny++){
+                            String right = store[ny][i].split("V\\s=\\s")[1];
+                            s.append(right);
+                        }
+                    }
+                }
+                
+                             
+                s.append("N =");
+                for(XAxis xax : ds.getXAxes()){
+                s.append(" " + xax.getHeader() + ";");
+                }
+                s.append("\n");
+                s.append("*F");
+                for(XAxis xax : ds.getXAxes()){
+                s.append(" V.;");
+                }
+                for(YAxis yx : ds.getYAxes()){
+                     s.append(" Y.;");
+                }     
+                s.append("*\n");
+                
+                for (int i=0; i<numpoints; i++){
+                    for( int nx=0;  nx<ds.getXAxes().size(); nx++){
+                        try{
+                        if(ds.getXAxis(nx+1).getBin(i+1).getRelation() != Relation.EQUALS){ s.append(" " + ds.getXAxis(nx+1).getBin(i+1).getRelation().toString()); }
+                        if(ds.getXAxis(nx+1).getBin(i+1).getFocus() != null){
+                            s.append(" " + ds.getXAxis(nx+1).getBin(i+1).getFocus());
+                            if(ds.getXAxis(nx+1).getBin(i+1).getLowValue() != null 
+                            && ds.getXAxis(nx+1).getBin(i+1).getHighValue() != null 
+                            && !ds.getXAxis(nx+1).getBin(i+1).getLowValue().equals(ds.getXAxis(nx+1).getBin(i+1).getHighValue())){
+                                s.append(" (BIN=" + ds.getXAxis(nx+1).getBin(i+1).getLowValue() + " TO " + ds.getXAxis(nx+1).getBin(i+1).getHighValue() + ")");                   
+                            }
+                        } else {
+                            if(ds.getXAxis(nx+1).getBin(i+1).getLowValue().equals(ds.getXAxis(nx+1).getBin(i+1).getHighValue())){
+                                 s.append(" " + ds.getXAxis(nx+1).getBin(i+1).getLowValue());                   
+                            } else {
+                                s.append(" " + ds.getXAxis(nx+1).getBin(i+1).getLowValue() + " TO " + ds.getXAxis(nx+1).getBin(i+1).getHighValue());                   
+                            }
+                       }
+                       } catch(Exception e){
+                           System.out.println("Exception i=" + i + " nx=" + nx);
+                        }
+                        s.append(";");                   
+                    }
+                    for (int n=0; n<nyax; n++){
+                        YAxis yax = ds.getYAxis(n+1);
+                        try{
+                            if(yax.getPoint(i+1).getRelation() != Relation.EQUALS){ s.append(" " + yax.getPoint(i+1).getRelation().toString()); }
+                            s.append(" " + yax.getPoint(i+1).getValue());
+                            int nerr=0;
+                            for(Uncertainty err : yax.getPoint(i+1).getErrors()){
+                                nerr++;
+                                String norm = "";
+                                if(err.getNormType() == ErrorNorm.PCT){  norm = " PCT"; } 
+                                if(nerr == 1) {
+                                    if(err.isSymmetric()){ s.append(" +- " + err.getPlus() + norm); }
+                                    else{s.append(" +" + err.getPlus() + norm + ",-" + err.getMinus() + norm);}
+                                }
+                                else if(nerr == 2) { 
+                                    s.append(" (DSYS=");
+                                    if(err.isSymmetric()) {s.append(err.getPlus() + norm);}
+                                    else{s.append("+" + err.getPlus() + norm + ",-" + err.getMinus() + norm);}
+                                } 
+                                else { 
+                                    s.append(",DSYS=");
+                                    if(err.isSymmetric()) {s.append(err.getPlus() + norm);}
+                                    else{s.append("+" + err.getPlus() + norm + ",-" + err.getMinus() + norm);}
+                                } 
+                            }
+                            if(nerr > 1) { s.append(")");}
+                        }
+                        catch(Exception e){ s.append(" - "); }
+                        s.append(";");
+                    }
+                    s.append("\n");
+                }
+                s.append("*CF *\n");
+            }
     	} 
 
-        
+        s.append("*E\n");
         return s.toString();
     }
 


More information about the HepData-svn mailing list