/* Classe che crea le classi TrackerCMS3 e eventDis3, legge i dati dei moduli del tracker dal file Tacker.dat e implementa diversi metodi per disegnare i layer del tracker con gli eventi, metodi che saranno usati dalla classe TrackerCMS3 */ import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.io.*; import java.util.*; import java.applet.Applet.*; public class TrackerDisF3 extends Frame implements WindowListener{ static float len=0,hbot=0,htop=0,hapo=0,hthi=0; static float posx=0,posy=0,posz=0; static float vposx[]=new float[2000]; static float vposy[]=new float[2000]; static float vposz[]=new float[2000]; static float vhbot[]=new float[2000]; static float vhtop[]=new float[2000]; static float vhapo[]=new float[2000]; static int vane[]=new int[2000]; static int vmod[]=new int[2000]; static int nmoduli = 0; static int nlay = 0; static int nhits = 0; static Polygon pol[]=new Polygon[2000]; Polygon c; int xsize=400, ysize=200; //serve per drawAll Image oimg; Graphics og,bimg; BufferedImage buf; int memoryLayer; double Valzoom=1.; double xmin=-2., xmax=2., ymin=-2., ymax=2.; static Image immgF1, immgF2; static TrackerCMS3 tracker; static eventDis3 event; Image immgAllTracker; int width, height; //Dimensioni Disegno i valori vengono settati in drawL e drawAll /*--------------------main-----------------------*/ public static void main(String[] args) { System.out.println("Chiamato il main del Frame"); TrackerDisF3 h = new TrackerDisF3(); eventDis3 event= new eventDis3(h); TrackerCMS3 tracker = new TrackerCMS3(h, event); System.out.println("Carico cms.jpg"); immgF1=Toolkit.getDefaultToolkit().getImage("../../cms.jpg"); immgF2=Toolkit.getDefaultToolkit().getImage("../../cms2.jpg"); System.out.println("Chiamo la init()"); tracker.init(); h.add("Center",tracker); h.pack(); h.show(); } /*--------------------COSTRUTTORE per TrackerDisF3 -----------------------*/ public TrackerDisF3() { System.out.println("Chiamato il costruttore di TrackerDisF3"); setTitle("Tracker map"); addWindowListener(this); //per gestire il tasto di chiusura, riduci a icona ... } //Gestisco gli eventi Window public void windowOpened(WindowEvent e){ System.out.println("Frame aperto"); } public void windowClosing(WindowEvent e){ hide(); //chiude il frame System.out.println("Premuto Chiudi Frame"); System.out.println("Il Frame è stato aperto e poi chiuso"); } public void windowClosed(WindowEvent e){ System.out.println("Frame chiuso"); } public void windowActivated(WindowEvent e){ System.out.println("Frame attivato"); } public void windowDeactivated(WindowEvent e){ System.out.println("Frame disattivato"); } public void windowIconified(WindowEvent e){ System.out.println("Frame riduci a icona"); } public void windowDeiconified(WindowEvent e){ System.out.println("Frame deiconificata"); } /*-----------leggo i dati----------*/ public void leggi(int nlayer) throws IOException{ File inputFile = new File("../../tracker.dat"); //metodo per ottenere il file in una applicazione StringTokenizer st; BufferedReader br = new BufferedReader(new FileReader (inputFile)); String s ; nlay= nlayer; nmoduli=0; System.out.println("metodo leggi(nlayer) nlay="+nlay); while(br.ready()){ s = br.readLine(); st = new StringTokenizer(s); int imod = new Integer(st.nextToken()).intValue(); int px = new Integer(st.nextToken()).intValue(); int br_fw = new Integer(st.nextToken()).intValue(); int layer = new Integer(st.nextToken()).intValue(); int anello = new Integer(st.nextToken()).intValue(); int nmod = new Integer(st.nextToken()).intValue(); posx = new Float(st.nextToken()).floatValue(); posy = new Float(st.nextToken()).floatValue(); posz = new Float(st.nextToken()).floatValue(); hbot = new Float(st.nextToken()).floatValue(); htop = new Float(st.nextToken()).floatValue(); hapo = new Float(st.nextToken()).floatValue(); hthi = new Float(st.nextToken()).floatValue(); if(layer==nlay){ vane[nmoduli]=anello;vmod[nmoduli]=nmod; vposx[nmoduli]=posx; vposy[nmoduli]=posy; vposz[nmoduli]=posz; vhtop[nmoduli]=htop; vhbot[nmoduli]=hbot; vhapo[nmoduli]=hapo; nmoduli++; } } br.close(); } /*--------------------Metodo DrawL-------------------------*/ public void drawL( Graphics g, double Valzoom){ width=700; height=700; //dimensioni disegno System.out.println("metodo drawL() nlay="+nlay+" nmoduli="+nmoduli); if(nlay >12 && nlay <17){ xmin=-.30*Valzoom; xmax=.30*Valzoom; ymin=-.30*Valzoom; ymax=.30*Valzoom; } else if(nlay >28 ){ xmin=-2.5*Valzoom; xmax=2.5*Valzoom; ymin=-1.*Valzoom; ymax=28.*Valzoom; if(nlay <32){xmin=-1.*Valzoom;xmax=1.*Valzoom;} } else{ xmin=-1.7*Valzoom; xmax=1.7*Valzoom; ymin=-1.7*Valzoom; ymax=1.7*Valzoom; } System.out.println("Layer xmin="+xmin+" xmax="+xmax); Polygon c; g.setColor(Color.white); g.fillRect(0,0,xsize*3,ysize*14); //width e height for(int i=0;i0;nlay--){ xmin=-1.3 ;ymin=-1.3;xmax=1.3;ymax=1.3; if(nlay >12 && nlay <17){ xmin=-.20;xmax=.20;ymin=-.20;ymax=.20; } if(nlay >28 ){ xmin=-2.1;xmax=2.1;ymin=-0.9;ymax=28.; if(nlay <32){xmin=-0.7;xmax=0.7;} if(nlay >31 && nlay <36){xmin=-1.5;xmax=1.5;} } try { leggi(nlay); } catch (IOException e) { System.out.println("errore IO"); } fillimage(); if(nlay==14){ix =0;iy=-ysize;} if(nlay==15){ix=2*xsize;iy=-ysize;} if(nlay==29){ix=xsize;iy=-ysize;} iy = iy+ysize; System.out.println(ix+" "+iy); g.drawImage(oimg,ix,iy,this); bimg.drawImage(oimg,ix,iy,null); } for(nlay=15;nlay<42;nlay++){ xmin=-1.3;ymin=-1.3;xmax=1.3;ymax=1.3; if(nlay >12 && nlay <17){ xmin=-.20;xmax=.20;ymin=-.20;ymax=.20; } if(nlay >28 ){ xmin=-2.1;xmax=2.1;ymin=-0.9;ymax=28.; if(nlay <32){xmin=-0.7;xmax=0.7;} if(nlay >31 && nlay <36){xmin=-1.5;xmax=1.5;} } try { leggi(nlay); } catch (IOException e) { System.out.println("errore IO"); } fillimage(); if(nlay==1){ix =0;iy=-ysize;} if(nlay==15){ix=2*xsize;iy=-ysize;} if(nlay==29){ix=xsize;iy=-ysize;} iy = iy+ysize; System.out.println(ix+" "+iy); g.drawImage(oimg,ix,iy,this); bimg.drawImage(oimg,ix,iy,null); } } bimg.setColor(Color.white); bimg.fillRect(xsize,13*ysize,xsize,ysize); } void fillimage(){ og.setColor(Color.white); og.fillRect(0,0,xsize,ysize); og.setColor(Color.red); for(int i=0;i12 && nlay <17){ //r = r*4; xp[0]=r-vhtop[i];yp[0]=-vhapo[i]; xp[1]=r+vhtop[i];yp[1]=-vhapo[i]; xp[2]=r+vhtop[i];yp[2]=vhapo[i]; xp[3]=r-vhtop[i];yp[3]=vhapo[i]; }else{ //r = r + r/3.; xp[0]=r-vhapo[i];yp[0]=-vhbot[i]; xp[1]=r+vhapo[i];yp[1]=-vhtop[i]; xp[2]=r+vhapo[i];yp[2]=vhtop[i]; xp[3]=r-vhapo[i];yp[3]=vhbot[i]; } for(int j=0;j<4;j++){ xp1 = xp[j]*Math.cos(phi)-yp[j]*Math.sin(phi); yp1 = xp[j]*Math.sin(phi)+yp[j]*Math.cos(phi); xp[j] = xp1;yp[j]=yp1; x=xpixel(xp[j]);y=ypixel(yp[j]); c.addPoint(x,y); } } else { // Barrel xt1=r;yt1=-vhtop[i]/2.; xs1 = xt1*Math.cos(phi)-yt1*Math.sin(phi); ys1 = xt1*Math.sin(phi)+yt1*Math.cos(phi); xt2=r;yt2=vhtop[i]/2.; xs2 = xt2*Math.cos(phi)-yt2*Math.sin(phi); ys2 = xt2*Math.sin(phi)+yt2*Math.cos(phi); xp[0]=vposz[i]-vhapo[i]/2.;yp[0]=4.2*phival(xs1,ys1); xp[1]=vposz[i]+vhapo[i]/2.;yp[1]=4.2*phival(xs1,ys1); xp[2]=vposz[i]+vhapo[i]/2.;yp[2]=4.2*phival(xs2,ys2); xp[3]=vposz[i]-vhapo[i]/2.;yp[3]=4.2*phival(xs2,ys2); for(int j=0;j<4;j++){ x=xpixel(xp[j]);y=ypixel(yp[j]); c.addPoint(x,y); } } //g.setColor(Color.red); //if(nmodulo > 100 ) g.setColor(Color.blue); g.setColor(new Color(100,100,240)); //blu scuro g.drawPolygon(c); /**********************************************************************/ //Disegno i Punti dell' evento se sono in questo layer nhits=event.numhits; for(int k=0;k28){ //Barrel pposx=xpixel(event.vposz[k]); pposy=ypixel(4.2*phival(event.vposx[k],event.vposy[k])); } g.setColor(Color.red); if(nmodulo>100) g.setColor(Color.green); g.fillOval(pposx,pposy, 4,4); // System.out.println(vane[i]+" "+vmod[i]+" "+vposz[i]+" "+phi+" "+vhtop[i]+" "+vhapo[i]+" "+x+" "+y); // System.out.println(" "+event.vposz[k]+" "+pposx+" "+pposy); } } }//for return c; } double phival(double x,double y){ double phi; double phi1=Math.atan(y/x); phi=phi1; if(y < 0.&&x>0)phi=phi1+2.*Math.PI; if(x < 0.)phi=phi1+Math.PI; if(Math.abs(y)<0.000001&&x>0)phi=0; if(Math.abs(y)<0.000001&&x<0)phi=Math.PI; if(Math.abs(x)<0.000001&&y>0)phi=Math.PI/2.; if(Math.abs(x)<0.000001&&y<0)phi=3.*Math.PI/2.; return phi; } }