Integración de una cadena generada en bucle For con Graph BuilderEstoy teniendo dificultades para ejecutar el script de abajo. Yo y tratando de crear parcelas personalizadas usando el generador de gráficos. Quiero hacer que cree un nuevo trazado de acuerdo con la cantidad de datos que se analizan y un mapa personalizado que hice alrededor de cada conjunto de datos "wafer2" (la variable con la que estoy tratando de hacer esto se llama "Dmaps"). También quiero que ajuste la barra de escala en función de la receta de análisis elegida por un usuario (esta parte de la secuencia de comandos funciona correctamente, ignorando las referencias "Dscale"). Con lo que estoy luchando es conseguir que la cadena que estoy generando con mi bucle for tenga la sintaxis correcta o que esa cadena se integre correctamente con el script del generador de gráficos. ¿Alguien puede decirme lo que me falta?
Gracias,
names default to here(1);
UniqueSlots = Associative Array( :Slot ) << get keys;
For( i = 1, i <= N Items( uniqueslots ), i++,
If( i == 1,
Dmaps = Eval("Dispatch( {}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) || "),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
)
);
If( i < N Items( uniqueslots ),
Dmaps = Char( Dmaps ) || Eval(", Dispatch({}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) || "),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
)
);
If( i == N Items( uniqueslots ),
Dmaps = Char( dmaps ) || Eval("Dispatch({}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) || "),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
)
);
);
Show( dmaps );
Dscale = If( Contains( :SetupID[1], "0.026-0.2190um" ) > 0,
Parse( "[0.026 0.219]" ),
If( Contains( :SetupID[1], "0.026-0.2190umDSA" ) > 0,
Parse( "[0.026 0.219]" ),
If( Contains( :SetupID[1], "0.045-0.1421um" ) > 0,
Parse( "[0.045 0.1421]" ),
If( Contains( :SetupID[1], "0.046-0.1215um" ) > 0,
Parse( "[0.046 0.1215]" ),
If( Contains( :SetupID[1], "Post" ) > 0,
Parse( "[0.019 0.1297]" ),
If( Contains( :SetupID[1], "31-56.9nm" ) > 0,
Parse( "[0.031 0.0569]" )
)
)
)
)
)
);
Show( dscale );
script4 = Eval(
Parse(
"Graph Builder(
Size(
If( N Items( Associative Array( :Slot ) << get keys ) <= 16,
585,
1170
),
If( N Items( Associative Array( :Slot ) << get keys ) > 4,
50 * N Items( Associative Array( :Slot ) << get keys ) + Abs( 4 - Modulo( N Items( Associative Array( :Slot ) << get keys ), 4 ) ) /
4,
220
)
),
Show Control Panel( 0 ),
Show Footer( 0 ),
Continuous Color Theme( \!"Spectral\!" ),
Categorical Color Theme( \!"JMP Default\!" ),
Lock Scales( 1 ),
Title Fill Color( {221, 215, 204} ),
Title Frame Color( {221, 215, 204} ),
Level Fill Color( {233, 230, 226} ),
Level Frame Color( {221, 215, 204} ),
Variables(
X( :X ),
Y( :Y ),
Wrap(
:Slot,
Levels( N Items( Associative Array( :Slot ) << get keys ) ),
Levels per Row( If( N Items( Associative Array( :Slot ) << get keys ) <= 16, 4, 8 ) )
),
Overlay( :TIME ),
Color( :DSIZE )
),
Elements( Points( X, Y, Legend( 3 ) ) ),
SendToReport(
Dispatch(
{},
\!"X\!",
ScaleBox,
{Scale( \!"Geodesic\!" ), Min( -0.16 ), Max( 0.16 ), Inc( 0.05 ), Minor Ticks( 0 ), Label Row(
{Show Major Labels( 0 ), Show Major Ticks( 0 ), Show Minor Ticks( 0 )}
)}
),
Dispatch(
{},
\!"Y\!",
ScaleBox,
{Scale( \!"Geodesic\!" ), Format( \!"Best\!", 12 ), Min( -0.16 ), Max( 0.16 ), Inc( 0.05 ), Minor Ticks( 0 ),
Label Row( {Show Major Labels( 0 ), Show Major Ticks( 0 ), Show Minor Ticks( 0 )} )}
),
Dispatch(
{},
\!"400\!",
ScaleBox,
{Legend Model(
3,
Properties(
0,
{gradient(
{Color Theme( \!"Green Yellow Red\!" ), Scale Values(
"|| char(DScale) ||"
), Label Format( \!"Fixed Dec\!", 15, 3 ), N Labels( 5 )}
)}
)
)}
),
Dispatch( {}, \!"graph title\!", TextEditBox, {Set Text( :lot[1] )} ),
Dispatch( {}, \!"400\!", LegendBox, {Set Title( \!"\!" )} ),
"|| char(parse(Dmaps)) ||"));"
)
);
Re: Integración de una cadena generada en bucle For con Graph BuilderGracias, ese código se ve mucho más limpio.
He adjuntado datos de Sampel junto con los archivos de mapas personalizados que (debo pegar en C: \ Archivos de programa \ SAS \ JMP \ 13 \ Mapas). Con las ediciones de script que realizó, obtengo un gráfico sin ningún mapa más el siguiente error:
Inesperado ",". Tal vez haya un ";" perdido o ",".
Línea 3 Columna 32: ... ference Line Order (3)}) ►, Dispatch ({}, "Graph Bui ...
El texto restante que fue ignorado fue
, Despacho ({} "," Generador de gráficos, Cuadro de cuadros (12), {Mapa de fondo (Límites "(" Wafer2)),
Tamaño del marcador (3), Orden de línea de cuadrícula (2), Orden de línea de referencia (3)}, Despacho ({} ","
Graph Builder, FrameBox (13), {Mapa de fondo (Límites "(" Wafer2)), Tamaño del marcador (3),
Orden de línea de cuadrícula (2), Orden de línea de referencia (3)}) Despacho ({} "," Generador de gráficos, FrameBox (
14), {Mapa de fondo (Límites "(" Wafer2)), Tamaño del marcador (3), Orden de línea de cuadrícula (2),
Orden de línea de referencia (3)}
No se puede encontrar FrameBox ["Graph Builder"] en {}
Generador de gráficos []
Re: Integración de una cadena generada en bucle For con Graph BuilderHe examinado tu guión y, sin tener algunos datos de muestra con los que jugar, debo ir más allá de lo que tengo.
Encontré un error lógico. Su valor de Dmaps nunca terminará con el valor que estableció para la comparación de i == 1. Esto se debe a que la siguiente cláusula If también se ejecutará cuando i == 1, ya que cuando i es igual a 1, también es menor que N elementos (uniqueslots).
Sugiero el siguiente código para reestructurar ese código:
If(
i == 1,
Dmaps = Eval(
"Dispatch( {}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) ||
"),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
),
i < N Items( uniqueslots ),
Dmaps = Char( Dmaps ) || Eval(
", Dispatch({}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) ||
"),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
),
i == N Items( uniqueslots ),
Dmaps = Char( dmaps ) || Eval(
"Dispatch({}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) ||
"),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
)
);
/*);
If( i < N Items( uniqueslots ),
Dmaps = Char( Dmaps ) || Eval(", Dispatch({}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) || "),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
)
);
If( i == N Items( uniqueslots ),
Dmaps = Char( dmaps ) || Eval("Dispatch({}, \!"Graph Builder\!",FrameBox(" || Char( uniqueslots[i] ) || "),
{Background Map( Boundaries( \!"Wafer2\!" ) ), Marker Size( 3 ), Grid Line Order( 2 ),
Reference Line Order( 3 )})"
)
);*/
);
Del mismo modo, puede deshacerse de todos sus IF anidados en su segunda estructura If con la siguiente
Dscale = If(
Contains( :SetupID[1], "BareSiPre0.026-0.2190um" ) > 0, Parse( "[0.026 0.219]" ),
Contains( :SetupID[1], "BareSiPst0.026-0.2190umDSA" ) > 0, Parse( "[0.026 0.219]" ),
Contains( :SetupID[1], "LTALDOX300A0.045-0.1421umDSA" ) > 0, Parse( "[0.045 0.1421]" ),
Contains( :SetupID[1], "ALDOX2500A0.046-0.1215umDSA" ) > 0, Parse( "[0.046 0.1215]" ),
Contains( :SetupID[1], "BKM_BareSi_19nmPost_OHS" ) > 0, Parse( "[0.019 0.1297]" ),
Contains( :SetupID[1], "LTALDOx180A31-56.9nm" ) > 0,
Parse( "[0.031 0.0569]" )
/*If( Contains( :SetupID[1], "BareSiPst0.026-0.2190umDSA" ) > 0,
Parse( "[0.026 0.219]" ),
If( Contains( :SetupID[1], "LTALDOX300A0.045-0.1421umDSA" ) > 0,
Parse( "[0.045 0.1421]" ),
If( Contains( :SetupID[1], "ALDOX2500A0.046-0.1215umDSA" ) > 0,
Parse( "[0.046 0.1215]" ),
If( Contains( :SetupID[1], "BKM_BareSi_19nmPost_OHS" ) > 0,
Parse( "[0.019 0.1297]" ),
If( Contains( :SetupID[1], "LTALDOx180A31-56.9nm" ) > 0,
Parse( "[0.031 0.0569]" )
)
)
)
)
)*/
);