// Copyright 2000, CERN, Geneva, Switzerland package hep.physics.yappi.servlet; /** * Create a LaTeX file out of XMLParticlePropertyProvider * * @author Patrick Hellwig */ import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import hep.physics.yappi.*; public class CreateTexFile extends HttpServlet { // FIXME: to be redone in a more XMLWriter way /* PrintWriter out; Yappi yappi; String searchParameter; String lookup4; String dummyPara; // dummy Parameter private String Eto10times(String eString) { if (eString.lastIndexOf('E') == -1) return eString; String tempstr = "$"+eString.substring(0,eString.indexOf('E')); tempstr = tempstr + "\\cdot 10^{" + eString.substring(eString.indexOf('E')+1)+"}$"; return tempstr; } private String Eto10times(double eString) { if (String.valueOf(eString).lastIndexOf('E') == -1) return String.valueOf(eString); String tempstr = "$"+String.valueOf(eString).substring(0,String.valueOf(eString).indexOf('E')); tempstr = tempstr + "\\cdot 10^{" + String.valueOf(eString).substring(String.valueOf(eString).indexOf('E')+1)+"}$"; return tempstr; } private String ErrorPrint(double posError, double negError, String unit) { String printString = ""; if (posError == negError) { if (posError != 0) printString = " $\\pm$ "+Eto10times(posError)+" "+unit; else if (unit != null) printString = unit; } else { //printString = "\\array{+"+Eto10times(posError)+"\\\\-"+Eto10times(negError)+"}"+" "); if (posError != 0) printString = " \\begin{scriptsize}$\\begin{array}{l}+"+Eto10times(posError)+"\\\\-"+Eto10times(negError)+"\\end{array}$\\end{scriptsize}"+"\\"+unit; else if (unit != null) printString = unit; } return printString; } private void printParticleInfo(ParticleType testp) { try{ out.println("\\begin{tabular}{lll}<br>"); out.println("\\fbox{$"+testp.getTeXName()+"$}&\\makebox[5.0cm]{}&$$\\\\<br>"); out.println("\\vspace{0.2cm}$$\\\\<br>"); Iterator data2 = testp.getData(); while (data2.hasNext()) { out.print("&\\multicolumn{2}{l}{"); Data data2e = (Data) data2.next(); if (testp.getData(data2e.getName()).getPosError() != 0) { out.print(data2e.getTeXName()+" = ("+Eto10times(data2e.getValue())); out.print(ErrorPrint(testp.getData(data2e.getName()).getPosError(),testp.getData(data2e.getName()).getNegError(),") "+testp.getData(data2e.getName()).getUnit())); } else { out.print(data2e.getTeXName()+" = "+Eto10times(data2e.getValue())); out.print(ErrorPrint(testp.getData(data2e.getName()).getPosError(),testp.getData(data2e.getName()).getNegError(),testp.getData(data2e.getName()).getUnit())); } if (testp.getData(data2e.getName()).getScaleFactor() != 0) out.print(" (S = "+testp.getData(data2e.getName()).getScaleFactor()+")"); out.println("}\\\\<br>"); } out.println("\\end{tabular}<br>"); out.println("\\linebreak<br>"); out.println(""); Iterator decay2 = testp.getDecayChannels(); if (decay2.hasNext()) { out.println("\\begin{tabular}{llrr}<br>&&Scale factor/&\\\\<br>\\textbf{$"+testp.getTeXName()+"$ DECAY MODES}&Fraction ($\\Gamma_{i}/\\Gamma$)&Confidence level&p\\\\<br>"); out.println("\\hline<br>"); while (decay2.hasNext()) { DecayChannel decay2e = (DecayChannel) decay2.next(); // print out decay name out.print("$"); Iterator decPart = decay2e.getDecayParticles(); while (decPart.hasNext()) { DecayProduct decPart2 = (DecayProduct) decPart.next(); if (decPart2.getType().equals("Particle")) out.print(yappi.lookupName(decPart2.getName()).getTeXName()); else out.print("$ "+decPart2.getName()+"$"); } out.print("$&"); out.print("("+decay2e.getFraction()); //out.print(" \\begin{scriptsize}$\\begin{array}{l}+"+decay2e.getPosError()+"\\\\-"+decay2e.getNegError()+"\\end{array}$\\end{scriptsize}"+")\\%&"); out.print(ErrorPrint(decay2e.getPosError(),decay2e.getNegError()," ")+")\\%&"); if (decay2e.getScaleFactor()!= 0) out.print("S="+decay2e.getScaleFactor()); out.print("&"); out.println(decay2e.getP()+" "+decay2e.getPUnit()+"\\\\<BR>"); } out.println("\\end{tabular}<br>"); } out.println("\\rule{15.0cm}{1mm}<br>"); } catch (Exception e) {} } private void displayFamilyTree() { try { Iterator families = yappi.getFamilies(); while (families.hasNext()) { Family famdat = (Family) families.next(); System.out.println(famdat.getName()); displayFamilyTree(famdat,3); } } catch (Exception e) { } } private void displayFamilyTree(Family fatree, int cha) { try{ Iterator fa = fatree.getFamilies(); while (fa.hasNext()) { Family famdat = (Family) fa.next(); for (int i=0;i<cha;i++) out.print(" "); out.println("<font color=\"#ff0000\">"+famdat.getName()+"</font><br>"); displayFamilyTree(famdat,cha+3); } } catch (Exception e) {} try{ Iterator fa2 = fatree.getParticles(); while (fa2.hasNext()) { DecayProduct famdat2 = (DecayProduct) fa2.next(); for (int i=0;i<cha;i++) out.print(" "); //ParticleType testpart = yappi.lookupName(famdat2.getName()); //out.println("<a href=ParticleLookup?PDGID="+testpart.getData("PDGID").getValue()+">"); out.println("<a href=ParticleLookup?Name="+famdat2.getName()+">"); out.println(famdat2.getName()); out.println(" (PDGID: "+famdat2.getData("PDGID").getValue()+") </a><br>"); //out.println(" (PDGID: "+testpart.getData("PDGID").getValue()+") </a><br>"); } } catch(Exception e) {} } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); out = response.getWriter(); System.out.println("_____________________________________________ new request "); System.out.println("Header: "+request.getHeader("")); System.out.println("QueryString: "+request.getQueryString()); System.out.println("Method: "+request.getMethod()); System.out.println("PathInfo: "+request.getPathInfo()); System.out.println("PathTranslated: "+request.getPathTranslated()); System.out.println("RemoteUser: "+request.getRemoteUser()); System.out.println("RequestURI: "+request.getRequestURI()); yappi = new Yappi("/xml/ppml3.xml"); //////////////////////////////// // Determine the URI: // 1. ParticleLookup/PDGID/2123 // 2. ParticleLookup?PDGID=2123 // lookup4 = null; searchParameter = null; if (request.getPathInfo() == null) { // 2. ParticleLookup?... if (request.getParameter("PDGID")!=null) { dummyPara = request.getParameter("PDGID").toUpperCase(); if (dummyPara.length()>0) { searchParameter = dummyPara; lookup4 = "PDGID"; } } if (request.getParameter("Name")!=null) { dummyPara = request.getParameter("Name").toUpperCase(); if (dummyPara.length()>0) { searchParameter = dummyPara; lookup4 = "Name"; } } } else { // 1. ParticleLookup/PDGID/2123 String rawParameter = request.getPathInfo().toUpperCase(); if (rawParameter.startsWith("/PDGID/")) { //lookup for PDGID Number // cut out /PDGID/ string dummyPara = rawParameter.substring(7); if (dummyPara.length()>0) { searchParameter = dummyPara; lookup4 = "PDGID"; } } if (rawParameter.startsWith("/NAME/")) { //lookup for Name // cut out /Name/ string dummyPara = rawParameter.substring(6); if (dummyPara.length()>0) { searchParameter = dummyPara; lookup4 = "Name"; if (searchParameter.equals("All")) lookup4 = "All"; } } if (rawParameter.startsWith("/ALL")) lookup4 = "All"; } System.out.println("LookUp in XML-Table for "+lookup4+" = "+searchParameter); out.println("<html>"); out.println("<body bgcolor=\"white\">"); out.println("<head>"); if (!((searchParameter == null) | (lookup4 == null))) out.println("<title> Particle LOOKUP: "+lookup4+" = "+searchParameter+"</title>"); else out.println("<title> Particle LOOKUP</title>"); out.println("</head>"); out.println("<body bgcolor=\"#FFFFFF\">"); // note that all links are created to be relative. this // ensures that we can move the web application that this // servlet belongs to to a different place in the url // tree and not have any harmful side effects. Iterator allParticles = yappi.getParticleProvider().getParticles(); out.println("\\documentclass[12pt,a4paper]{article}<br>"); out.println("\\pagestyle{myheadings}<br>"); out.println("\\begin{document}<br>"); out.println("\\markright{Particle Properties Summary Table}<br>"); out.println("\\noindent<br>"); while (lookup4 != null) { ParticleType testp = null; if (lookup4.equals("Name")) { try{ testp = yappi.lookupName(searchParameter); lookup4 = null; } catch (Exception e) {testp = null;} } if (lookup4 != null) if (lookup4.equals("PDGID")) { try{ testp = yappi.lookupData(lookup4,searchParameter); lookup4 = null; } catch (Exception e) { testp = null;} } if (lookup4 != null) if (lookup4.equals("All")) if (allParticles.hasNext()) testp = (ParticleType) allParticles.next(); else lookup4 = null; if (testp != null) printParticleInfo(testp); //else // out.println("\\Large no particle found with <font color=\"#ff0000\">"+lookup4+" = "+searchParameter+"</font><br>"); } out.println("\\vspace{0.5cm}<br>"); out.println("\\fbox{\\tiny This document was created with YaPPI2TeX\\\\(c)2000 Patrick Hellwig, CERN Summer Student, All Rights Reserved\\\\}<br>"); out.println("\\end{document}<br>"); out.println("<br>"); out.println("<h2> Family Structure: </h2>"); displayFamilyTree(); */ /* out.println("<hr>"); out.println("<h2> Do you want to lookup another particle ? </h2>"); out.println("<FORM METHOD=GET ACTION=\"ParticleLookup\">"); out.println("Please insert PDGID: <INPUT TYPE=TEXT NAME=\"PDGID\"><P>"); out.println("Please insert Name : <INPUT TYPE=TEXT NAME=\"Name\"><P>"); out.println("<INPUT TYPE=SUBMIT>"); out.println("</FORM>");*/ /* out.println("</BODY>"); out.println("</html>"); } */ }