Taller 3

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 ser reemplazado por algún un valor indicado
  • Argumentos opcionales o pasos opcionales van en rosado.
  • Lineas de codigo de algun archivo mas en este fondo beige
  • Usaré como editor gedit. Si ustedes son familiares con algun otro, pueden usarlo.

Material

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

O si prefiere, lo puede descargar directamente desde la terminal usando el comando wget:

wget --no-check-certificate http://hep.uniandes.edu.co/~aosorio/Particulas/ejercicios-Parte3.tgz
tar xzvf ejercicios-Parte3.tgz
cd ejercicios-Parte3

Ejercicio 1 – Creación de un simple Histograma

El primer ejercicio consistirá en la creación de un Histograma con informacion de la cinematica de algunas particulas. Editemos el script que se trabajo al final del Taller 2 y que simula eventos supersimetricos:

gedit pythia8_susy.C

  • Quitar el comentario en la linea siguiente del codigo y escribir el numero de bins 50 y el rango del histograma XMIN=0 y XMAX=100:

//TH1F * h1 = new TH1F("hpt", "Muons Pt", 50, 0, 100);

  • Esta linea define un Histograma 1D ( clase TH1F ).

  • Bajar hasta donde está el ciclo de generación y buscar la linea con el comentario "// Particle Loop" y agregrar el siguiente codigo:

while( iev < nev ) {
    
    pythia8->GenerateEvent();
    if (iev < 1) pythia8->EventListing();
    pythia8->ImportParticles(particles,"All");
    
    Int_t np = particles->GetEntriesFast();

    // Particle loop
    
    for (Int_t ip = 0; ip < np; ip++) {
      
      //Leemos informacion de cada particula

      TParticle* part = (TParticle*) particles->At(ip); //Esta es la particula i
      Int_t ist = part->GetStatusCode(); //obtenemos su estatus
      Int_t pdg = part->GetPdgCode(); // y su codigo PDG
      
       //1. Introducir una codicion para separar los muones

      //Queremos graficar el momento Transverso de los muones Pt == Sqrt(px*px + py*py)
      //2. Obtener aqui las componentes Px y Py del momento de las particulas

      //3. Llenar el histograma h1 con el momento transversar

      
    } // No olvidar! cerrar el loop que hemos introducido 

Estudiemos que esta pasando aqui:

  • El primer ciclo, es un ciclo sobre la generacion de eventos . Por ello es que la condicion es hacer este ciclo hasta que alcance el maximo numero de eventos que hemos especificado desde el principio del script. La generacion esta instruida por el comando pythia8->GenerateEvent();

  • El segundo ciclo, aquel que hemos introducido, hace por cada evento un ciclo sobre el numero maximo de particulas que Pythia ha generado. El maximo numero de particulas se obtiene con el metodo Int_t np = particles->GetEntriesFast();

  • Los muones tienen por código de identificación 13 y -13 (para el anti-mu). Volvemos a este comentario mas adelante

  • Cada partícula está representada por un objeto de tipo TParticle y queremos graficar el momento transversal de cirtas particulas
    • Mirando en la documentación TParticle, como podríamos obtenerlo?

  • Por el momento, el codigo introducido no hace aun lo que queremos. Recordemos, queremos hacer 3 cosas:

  1. Entre la particulas, identificar aquellas que son muones -es decir con codigo 13 y -13
  2. Un vez identificadas, tenemos calcular el momento transversal
  3. Llenar el histograma que creamos para hacer

  • Por lo tanto, debemos copiar el siguiente codigo - guiarse por los comentarios:


      //1. Introducir una codicion para separar los muones
      if ( pdg == 13 || pdg == -13 ) {

      //Queremos graficar el momento Transverso de los muones Pt == Sqrt(px*px + py*py)
      //2. Obtener aqui las componentes Px y Py del momento de las particulas

      float px = part->Px();
      float py = part->Px();
      float Pt = sqrt(px*px + py*py);

      //3. Llenar el histograma h1 con el momento transversar
      h1->Fill( Pt );
 
      } ///no olvidar! cerrar el condicional 

* Bien! Esto nos sirve para llenar el histograma. Ahora, si queremos visualizar el histograma debemos introducir al final de todo los ciclos lo siguiente:

    // Ahora podemos dibujar el histograma y que lo muestre en pantalla
    h1->Draw();

  • Guarde las modificaciones y cierre. Ejecutar ahora el script desde la terminal:

root -l pythia8_susy.C

La opción -l ("menos L minuscula") evita que salga la imagen de saludo de ROOT, lo que nos ahorra algunos milisegundos.

Ejercicio 2 – Pythia8Analsis – Una clase para hacer el análisis sobre datos simulados

Ahora lo que queremos es introducir una técnica para el análisis de datos simulados.

El script pythia8_susy.C genera los eventos y los guarda en un archivo de formato de ROOT (manejado por la clase TFile). En el script, la creacion del archivo esta en la siguiente linea:

TFile

Dentro de este archivo existe lo que se conoce como un TTree – un árbol – en el que cada rama corresponde a las variables que poseen las partículas y las hojas son los valores que toman por evento. Este árbol se define en la siguiente linea del código:

TTree

¿Cómo hacer un analisis de los datos contenidos en este árbol? Lo haremos utilizando una clase llamada PythiaAnalysis. Esta clase es automáticamente generada por ROOT basada en la estructura que tiene árbol. En resumen, ROOT genera siguientes dos archivos:

  • PythiaAnalysis.h: declaración de la clase, sus variables y metodos
  • PythiaAnalysis.C: definición del metodo Loop. Este metodo realiza un ciclo/loop sobre los eventos contenidos en el árbol

Editemos el script PythiaAnalisis.C:

gedit PythiaAnalysis.C

Intentemos hacer de nuevo un histograma que nos cuente el numero de muones por evento. Nos concentraremos en implementar el método Loop( ) que se encarga de hacer la iteración sobre los eventos almacenados.

  • Para ello debemos adicionar un segundo ciclo, que nos itere sobre la particula i-esima, parecido a lo que hicimos en el ejercicio anterior:

  • En este ciclo, preguntamos por el PDG_ID de la particula y comparamos
  • Adicionamos una condición y un contador para muones
  • Finalizado este loop podemos entonces graficar la distribución del número de muones por evento

Nota: la lectura del TTree nos hace perder los objetos partículas como tales (TParticle). Su información se encuentra ahora en forma de arreglos o arrays a la C/C++ (ver PythiaAnalysis.h).

  • Uno tiene dos opciones:

  1. leer y manipular los arreglos
  2. leer los arreglos y crear de ellos objetos TParticle

Ejercicio 3 – JetPythiaAnalysis – Una clase para hacer el análisis sobre datos simulados incluyendo Jets

Ahora queremos introducir una técnica para el análisis de datos simulados usando los algoritmos de reconstrucción ded Jets que nos da el paquete FastJet (incluido en el Live-CD que ustedes tienen). Esto lo hemos implementado en una clase llamada JetPythiaAnalysis la cual posee las mismas caracteristicas de PythiaAnalysis, pero además incluye la posibilidad de reconstruir Jets.

  • Abrir los archivos JetPythiaAnalysis.h y JetPythiaAnalysis.C : explorar
  • Vamos a editar el archivo JetPythiaAnalysis.C, en particular su método Loop( ).

La idea es la de construir Jets a partir de partículas estables que Pythia ha generado. Estables son muones, electrones, piones, kaones (Pythia no los hace decaer).

Intentaremos ahora hacer un histograma de multiplicidad de Jets para distintos parámetros (un contador del número de jets que encuentra el algoritmo de clusterización). Si el tiempo lo permite, un segundo histograma que se puede hacer es el de momento transversal de los jets.

Eso sería todo! Buena suerte.

-- AndresOsorio - 15-May-2012

Edit | Attach | Watch | Print version | History: r11 | r5 < r4 < r3 < r2 | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r3 - 2012-05-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