/* 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 boolean posrel=true; 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=340, ysize=200; //serve per drawAll Image oimg, oimg1; Graphics og,og1,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; if(nlay < 29){ vhapo[nmoduli]=hapo/2.f; vhtop[nmoduli]=hbot/2.f; vhbot[nmoduli]=htop/2.f-(hbot/2.f-htop/2.f); } 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=-3.1*Valzoom; xmax=3.1*Valzoom; ymin=-3.1*Valzoom; ymax=40.*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*4,ysize*14); //width e height for(int i=0;i0;nlay--){ if(posrel){ xmin=-2.0 ;ymin=-2.0;xmax=2.0;ymax=2.0; if(nlay >12 && nlay <17){ xmin=-.40;xmax=.40;ymin=-.40;ymax=.40; } }else{ 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; } } 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++){ if(posrel){ xmin=-2.0 ;ymin=-2.0;xmax=2.0;ymax=2.0; if(nlay >12 && nlay <17){ xmin=-.40;xmax=.40;ymin=-.40;ymax=.40; } if(nlay >28 ){ xmin=-0.1;xmax=3.5;ymin=-0.1;ymax=8.5; if(nlay <32){xmin=-0.2;xmax=1.5;} if(nlay >31 && nlay <36){xmax=2.5;} } }else{ 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=-1.3;xmax=1.3;ymin=-1.;ymax=28.; if(nlay <32){xmin=-0.5;xmax=0.5;} if(nlay >31 && nlay <36){xmin=-1.;xmax=1.;} } } try { leggi(nlay); } catch (IOException e) { System.out.println("errore IO"); } fillimage(); if(nlay==1){ix =0;iy=-ysize;} if(nlay==15){ix=3*xsize;iy=-ysize;} if(nlay<29)iy = iy+ysize; if(nlay==29){ix=(int)(1.5*xsize);iy=0;} if(nlay>29&&nlay%2==0){ix=xsize;iy=iy+2*ysize;} if(nlay>29&&nlay%2!=0){ix=2*xsize;} System.out.println(ix+" "+iy); if(nlay<29){ g.drawImage(oimg,ix,iy,this); bimg.drawImage(oimg,ix,iy,null); }else{ g.drawImage(oimg1,ix,iy,this); bimg.drawImage(oimg1,ix,iy,null); } } } bimg.setColor(Color.white); bimg.fillRect(xsize,0,(int)(0.5*xsize),2*ysize); bimg.fillRect(2*xsize+(int)(0.5*xsize),0,(int)(0.5*xsize),2*ysize); } void fillimage(){ if(nlay>28){ og1.setColor(Color.white); og1.fillRect(0,0,xsize,2*ysize); og1.setColor(Color.red); for(int i=0;i12 && nlay <17){ if(posrel)r = r+r; 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{ if(posrel)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 if(posrel){ int numod; numod=vmod[i];if(numod>100)numod=numod-100; dx = vhapo[i]; phi=Math.PI; xt1=rmedio[nlay-29]; yt1=-vhtop[i]/2.; xs1 = xt1*Math.cos(phi)-yt1*Math.sin(phi); ys1 = xt1*Math.sin(phi)+yt1*Math.cos(phi); xt2=rmedio[nlay-29]; yt2=vhtop[i]/2.; xs2 = xt2*Math.cos(phi)-yt2*Math.sin(phi); ys2 = xt2*Math.sin(phi)+yt2*Math.cos(phi); dy=phival(xs2,ys2)-phival(xs1,ys1); /*xp[0]=vane[i]*(dx+dx/8.);yp[0]=numod*(dy+dy/8.); xp[1]=vane[i]*(dx+dx/8.)+dx;yp[1]=numod*(dy+dy/8.); xp[2]=vane[i]*(dx+dx/8.)+dx;yp[2]=numod*(dy+dy/8.)+dy; xp[3]=vane[i]*(dx+dx/8.);yp[3]=numod*(dy+dy/8.)+dy;*/ xp[0]=vane[i]*(dx+dx/8.);yp[0]=numod*(dy); xp[1]=vane[i]*(dx+dx/8.)+dx;yp[1]=numod*(dy); xp[2]=vane[i]*(dx+dx/8.)+dx;yp[2]=numod*(dy)+dy; xp[3]=vane[i]*(dx+dx/8.);yp[3]=numod*(dy)+dy; }else{ //r = r*2.; 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;k12 && nlay <17) rhit = rhit+rhit;else rhit = rhit + rhit/3.; xpp=rhit; ypp=-rhit*Math.sin(phi-phihit); pposx=xpixel(xpp*Math.cos(phi)-ypp*Math.sin(phi)); pposy=ypixel(xpp*Math.sin(phi)+ypp*Math.cos(phi)); } if(!posrel&&nlay<29){ pposx=xpixel(event.vposx[k]); pposy=ypixel(event.vposy[k]); } if(posrel&&nlay>28){ //Barrel pposx=xpixel(xp[0]+Math.abs(event.vposz[k]-vposz[i]+dx/2.)); pposy=ypixel(yp[0]+dy/2.+(phival(event.vposx[k], event.vposy[k])-phival(vposx[i],vposy[i]))); } if(!posrel&&nlay>28){ //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); } } }//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; } }