GeomConverter/src/org/lcsim/geometry/compact/converter/html
diff -u -r1.1 -r1.2
--- HtmlConverter.java 4 Jan 2011 21:59:13 -0000 1.1
+++ HtmlConverter.java 10 Jan 2011 20:51:16 -0000 1.2
@@ -1,6 +1,9 @@
package org.lcsim.geometry.compact.converter.html;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.List;
import java.util.Map;
@@ -10,6 +13,7 @@
import org.lcsim.geometry.compact.Detector;
import org.lcsim.geometry.compact.Field;
import org.lcsim.geometry.compact.Header;
+import org.lcsim.geometry.compact.Readout;
import org.lcsim.geometry.compact.Segmentation;
import org.lcsim.geometry.compact.Subdetector;
import org.lcsim.geometry.field.Solenoid;
@@ -19,9 +23,12 @@
* Convert a compact description to an html information page.
*
* @author Jeremy McCormick <[log in to unmask]>
- * @version $Id: HtmlConverter.java,v 1.1 2011/01/04 21:59:13 jeremy Exp $
+ * @version $Id: HtmlConverter.java,v 1.2 2011/01/10 20:51:16 jeremy Exp $
*/
// TODO add css
+// TODO add timestamp at bottom including generation date, user name, and compact file
+// used;
+// maybe some of this info should be at top summary
public class HtmlConverter
{
private HtmlConverter()
@@ -81,7 +88,25 @@
// Add subdetector index.
subdetectorIndex( td, detector, subdets );
- // Header.
+ // Layout row.
+ td = addLayoutRow( tbl );
+
+ // Add system ID index.
+ sysIdIndex( td, detector );
+
+ // Layout row.
+ td = addLayoutRow( tbl );
+
+ // Add readout index.
+ readoutIndex( td, detector );
+
+ // Layout row.
+ td = addLayoutRow( tbl );
+
+ // Radiation and interaction lengths table.
+ lengthTable( td, detector, subdets );
+
+ // Header for subdetector details section.
addHeader2( td, "Subdetector Details" );
// Add subdetectors.
@@ -106,13 +131,90 @@
// Fields.
fields( td, detector );
+ // Layout row.
+ td = addLayoutRow( tbl );
+
+ // Timestamp footer.
+ timestamp( td );
+
return root;
}
+ private static void timestamp( Element parent )
+ {
+ Calendar cal = Calendar.getInstance();
+ SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
+ String ts = new String( "Generated by GeomConverter at " + sdf.format( cal.getTime() ) + " by user " + System.getProperty( "user.name" ) + "." );
+
+ parent.addContent( new Element( "p" ).setText( ts ) );
+ }
+
+ private static void lengthTable( Element parent, Detector detector, List<String> subdets )
+ {
+ // Header.
+ addHeader2( parent, "Radiation and Interaction Lengths Table" );
+
+ Element tbl = new Element( "table" );
+ parent.addContent( tbl );
+ tbl.setAttribute( "border", "1" );
+ tbl.setAttribute( "cellpadding", "2" );
+
+ // Table header row.
+ addRow( tbl, new Element( "b" ).setText( "Subdetector" ), new Element( "b" ).setText( "Radiation Lengths" ), new Element( "b" ).setText( "Interaction Lengths" ) );
+
+ DecimalFormat dec = new DecimalFormat( "#.######" );
+
+ for ( String subdetName : subdets )
+ {
+ Subdetector subdet = detector.getSubdetector( subdetName );
+ AbstractLayeredSubdetector layers;
+ if ( subdet instanceof AbstractLayeredSubdetector )
+ {
+ layers = ( AbstractLayeredSubdetector ) subdet;
+ addRow( tbl, new Link( subdetName, "#" + subdetName ), dec.format( layers.getRadiationLengths() ), dec.format( layers.getInteractionLengths() ) );
+ }
+ }
+ }
+
+ private static void sysIdIndex( Element parent, Detector detector )
+ {
+ // Header.
+ addHeader2( parent, "SysId Index" );
+
+ // Table
+ Element tbl = new Element( "table" );
+ tbl.setAttribute( "border", "1" );
+ tbl.setAttribute( "cellpadding", "2" );
+ parent.addContent( tbl );
+
+ // Table header row.
+ addRow( tbl, new Element( "b" ).setText( "Sys Id" ), new Element( "b" ).setText( "Subdetector" ) );
+
+ // Make system ID list, only including non-zero values.
+ List<Integer> systemIds = new ArrayList<Integer>();
+ for ( Subdetector subdet : detector.getSubdetectors().values() )
+ {
+ if ( subdet.getSystemID() != 0 )
+ {
+ systemIds.add( subdet.getSystemID() );
+ }
+ }
+
+ // Sort system ID list.
+ java.util.Collections.sort( systemIds );
+
+ for ( Integer sysId : systemIds )
+ {
+ Subdetector subdet = detector.getSubdetector( sysId );
+ String subdetName = subdet.getName();
+ addRow( tbl, subdet.getSystemID(), new Link( subdetName, "#" + subdetName ) );
+ }
+ }
+
private static void subdetectorIndex( Element parent, Detector detector, List<String> names )
{
// Header.
- addHeader2( parent, "Subdetector Table" );
+ addHeader2( parent, "Subdetector Index" );
// Table.
Element tbl = new Element( "table" );
@@ -121,7 +223,7 @@
parent.addContent( tbl );
// todo: addHeaderRow method
- addRow( tbl, new Element( "b" ).setText( "Subdetector" ), new Element( "b" ).setText( "Readout" ), new Element( "b" ).setText( "System ID" ) );
+ addRow( tbl, new Element( "b" ).setText( "Subdetector" ) );
for ( String subdetName : names )
{
@@ -132,7 +234,51 @@
readoutName = subdet.getReadout().getName();
}
- addRow( tbl, new Link( subdetName, "#" + subdetName ), readoutName, subdet.getSystemID() );
+ addRow( tbl, new Link( subdetName, "#" + subdetName ) );
+ }
+ }
+
+ private static void readoutIndex( Element parent, Detector detector )
+ {
+ // Header.
+ addHeader2( parent, "Readout Index" );
+
+ // Table
+ Element tbl = new Element( "table" );
+ tbl.setAttribute( "border", "1" );
+ tbl.setAttribute( "cellpadding", "2" );
+ parent.addContent( tbl );
+
+ // Table header row.
+ addRow( tbl, new Element( "b" ).setText( "Readout" ), new Element( "b" ).setText( "Subdetectors" ) );
+
+ // Alpha sort on readout name.
+ List<String> readoutNames = new ArrayList<String>( detector.getReadouts().keySet() );
+ java.util.Collections.sort( readoutNames );
+
+ // Process Readouts by name.
+ for ( String readoutName : readoutNames )
+ {
+ // Get the Readout.
+ Readout readout = detector.getReadout( readoutName );
+
+ // Get the list of Subdetectors.
+ List<Subdetector> subdets = new ArrayList<Subdetector>();
+
+ // Make list of associated Subdetectors.
+ Element span = new Element( "span" );
+ for ( Subdetector subdet : detector.getSubdetectors().values() )
+ {
+ // Check if Readout matches.
+ if ( subdet.getReadout() == readout )
+ {
+ String subdetName = subdet.getName();
+ span.addContent( new Link( subdetName, "#" + subdetName ) );
+ }
+ }
+
+ // Add row for this Readout.
+ addRow( tbl, readout.getName(), span );
}
}
@@ -209,7 +355,7 @@
addLabeledRow( tbl, "Cell Size V", subdet.getReadout() != null ? cal.getCellSizeV() + " mm" : "NA" );
}
}
-
+
private static void defines( Element parent, Detector detector )
{
bookmark( parent, "defines" );
@@ -276,7 +422,6 @@
return td;
}
-
private static void addRow( Element table, Object... values )
{
if ( !table.getName().equals( "table" ) )