Ejercicios de Calentamiento Pre-Escuela
Convenciones utilizadas en esta guía
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

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.
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:
- Desde la línea de comando:
root hacerGrafica.C
- Desde la sesión interactiva de ROOT:
root[0] .x hacerGrafica.C
El resultado es la gráfica siguiente:
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");
--
AndresOsorio - 15-May-2012