Ejercicios de Calentamiento Pre-Escuela

Convenciones utilizadas en esta guía

  • Comandos escritos en la Linea de Comando de Linux (CLI) van en rojo y en marcados
  • Texto en azul es para introducir o ser reemplazado por algún un valor indicado
  • Argumentos opcionales o pasos opcionales van en rosado.
  • Lineas de código de algún archivo mas en este fondo beige
  • Usaré como editor gedit. Si ustedes son familiares con algún otro, pueden usarlo.

Los siguientes ejercicios nos servirán como preparación para los talleres durante la escuela, en las que simularemos datos y los analizaremos.

Material

El material para este taller, se puede descargar del siguiente link:

Una vez descomprimido el archivo, allí se encuentra el código necesario para la hacer los ejercicios. También existe una carpeta solución que contiene el código con las soluciones.

Ejercicio 1 – Cortar y Pegar

Dado que los ejercicios que haremos usualmente requieren de “copiar y pegar” (C&P), nos cercioraremos de que no tengamos problemas en esta sencilla operación. Para verificar que C&P del y hacia el terminal funciona. Empezaremos por copiar algunos comandos en la Terminal. Para abrir la terminal, ir a Applications > Accessories y hacer click en el icono utilities-terminal.png o Terminal. Ahora, copiar del texto siguiente, una linea al tiempo (seleccionar y hacer Ctrl+C) y en el terminal pegar (Shift+Ctlr+V) y luego "Enter":


tar xzvf ejercicios-PreEsc.tgz
cd ejercicios-PreEsc
chmod +x ejecutarEsteComando.py
./ejecutarEsteComando.py qwerty 

La respuesta debe mostrarnos su nombre de usuario y el texto ingresado:

Muy bien: Sr aosorio usted ha dado la clave qwerty

Si usted ejecuta el anterior comando sin ningún argumento:

./ejecutarEsteComando.py

El resultado será:

Error: Usted debe proveer la clave secreta

Ejercicio 2 – Edición simple de un archivo

El propósito de este ejercicio es que usted pueda editar un archivo sin problemas. Primero hagamos una copia de seguridad del siguiente archivo usando el comando cp de Linux (cp = copy):

cp editarEsteComando.py editarEsteComandoOriginal.py

Ahora, abra el archivo “editarEsteComando.py” y edite la línea 5 adicionando un símbolo # al principio de la línea. Explícitamente cambie las siguientes líneas:

gedit editarEsteComando.py

# Por favor comente la siguiente linea adicionando un símbolo # al frente de la línea siguiente

raise RuntimeError

Así debe quedar:

# Por favor comente la siguiente linea adicionando un simbolo # al frente de la línea siguiente

# raise RuntimeError

Guarde el archivo, salga del editor y ejecute el programa:

./editarEsteComando.py

Si todo sale bien debe resultar en pantalla:

 Muy bien: aosorio usted ha editado correctamente este script

Al contrario, si no se edita como se sugiere debemos obtener:


Traceback (most recent call last):
File "./editThisCommand.py", line 11, in ?
raise RuntimeError,
RuntimeError 

Ejercicio 3 – Variables de entorno del sistema

El propósito de este ejercicio es verificar que tenemos las variables de entorno necesarias para ejecutar ROOT.

  • Desde el terminal, ejecutar el siguiente comando:

echo $ROOTSYS
/opt/hepsw/root/pro
export MENSAJE=”Linux es fabuloso”
echo $MENSAJE
Linux es fabuloso

Pregunta: ¿Qué comando nos permite conocer que variables de entorno están definidas?

env
ORBIT_SOCKETDIR=/tmp/orbit-aosorio
SSH_AGENT_PID=1811
TERM=xterm
SHELL=/bin/bash
...

Ejercicio 4 – Interacción con ROOT I

  • Empecemos a trabajar con ROOT. Como vimos en el ejercicio anterior, las variables de entorno necesarias están definidas y podemos iniciar ROOT escribiendo el siguiente comando:

root

Ejercicio 5 – Interacción con ROOT II

Ahora vamos a realizar un ciclo (loop) que nos permita hacer la gráfica de una función. El siguiente es un ejemplo. La idea es que usted cree su propio ciclo para graficar una función relevante para usted. Para graficar en ROOT, utilizaremos la clase TGraph. Desde la línea de comando de ROOT:

root [0] float x = -10.0; 
root [1] float dx = 0.01; 
root [2] int i = 0; 
root [3] { TGraph mygraph; while ( x < 10.0 ) { 
end with '}', '@':abort > float fx = sin(x)/x; 
end with '}', '@':abort > mygraph.SetPoint(i,x,fx); 
end with '}', '@':abort > i=i+1; x=x+dx; } } 
root[13]  mygraph.Draw("ACP") 

En este punto, la gráfica para la función dada debe aparecer en pantalla.

c1.png

Cada uno de las lineas coloreadas en rojo, son declaraciones que el usuario de ROOT hace cuando se encuentra en una sesión interactiva con ROOT.

Ejercicio 6 – Interacción con ROOT III

Modificar el ejemplo anterior para hacer la gráfica de una función de su gusto. A diferencia del ejemplo anterior, vamos a crear un macro o script que encapsula los comandos que escribimos durante una sesión interactiva. Esto permite que podamos reusar el código. Para ello salir de la sesión interactiva de ROOT, escribiendo ".q" (punto y q). Editar el archivo siguiente:

gedit hacerGrafica.C

Este archivo contiene un esqueleto listo para que usted lo llene siguiendo los comentarios. Yo por ejemplo cambiaré mi función a F(x) = cos(x) y la graficaré en Coordenadas Polares usando la clase TGraphPolar. Guarde el archivo. Ahora bien, existen distintas formas de ejecutar el macro que hemos escrito:

  1. Desde la línea de comando:
     root hacerGrafica.C
  2. Desde la sesión interactiva de ROOT:
    root[0]  .x hacerGrafica.C 
El resultado es la gráfica siguiente:

c2.png

Ejercicio 7 - Interacción con ROOT IV

Vamos a llenar un histograma sencillo, con una distribución Gaussiana. Un histograma tipico en ROOT de 1D es un objeto de la clase TH1F. Empezaremos por editar el siguiente macro:

gedit crearHistograma.C

  • Lo primero que haremos es definir la función de la cual sacaremos la distribución de números aleatorios


//1. definir la funcion que nos defina la distribucion
TF1* myFunc1 = new TF1("func1","gaus");
//fijamos los parametros de esta funcion 1: media 2: sigma
myFunc1->SetParameter(0, 1.0); //es la constante que multiplica la funcion (factor)
myFunc1->SetParameter(1, 6.0); //es la media
myFunc1->SetParameter(2, 2.0); //es el sigma

  • Lo segundo es definir el histograma. Los argumentos en su orden para construir un histograma son los siguientes:
    • un nombre
    • un titulo
    • numero de bins
    • XMIN
    • XMAX


//2. definir un histograma 
TH1F* myHist1 = new TH1F("hist1","Distribucion de valors aleatorios", 100, 0.0, 15.0);

  • Ahora procedemos a llenar el histograma. Usaremos un metodo de la clase TH1F la cual toma como argumento la funcion/distribucion y el numero de numeros aleatorios que deseamos.


//3. Llenar el histograma con 10000 numeros aleatorios que siguen la distribucion func1
myHist1->FillRandom("func1",10000);

  • Ahora podemos dar algunas opciones para la presentacion del histograma, como son un titulo y seleccionar el color de linea:


//4. Algunas opciones graficas de presentacion del histograma
myHist1->GetXaxis()->SetTitle("Gaussian"); //titulo en X
myHist1->SetLineColor(9); //color de la linea

* Finalmente, estamos listos para dibujar nuestro histograma. Lo haremos con la opcion de colocar barras de error:


//5. Dibujar el histograma "e1" es la opcion para que se haga con barras de error
myHist1->Draw("e1");

gauss.png

-- AndresOsorio - 15-May-2012

Topic attachments
I Attachment History Action Size Date Who Comment
PNGpng c1.png r1 manage 6.2 K 2012-05-25 - 14:31 AndresOsorio plot1
PNGpng c2.png r1 manage 25.4 K 2012-05-25 - 14:32 AndresOsorio plot-2
Compressed Zip archivetgz ejercicios-PreEsc.tgz r3 r2 r1 manage 44.5 K 2012-05-31 - 23:26 AndresOsorio Ejercicios pre escuela
PNGpng firefox.png r1 manage 24.5 K 2012-05-24 - 18:50 AndresOsorio firefox
PNGpng gauss.png r1 manage 11.5 K 2012-05-29 - 18:13 AndresOsorio gauss-distribution
PNGpng utilities-terminal.png r1 manage 1.4 K 2012-05-24 - 18:50 AndresOsorio terminal
Edit | Attach | Watch | Print version | History: r11 < r10 < r9 < r8 < r7 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r11 - 2013-08-22 - AndresOsorio
 
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    Main All webs login

This site is powered by the TWiki collaboration platform Powered by PerlCopyright &© 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback