2. Muestras de datos utilizadas para el analisis
- Datasets utilizados: Muones generados con Particle gun de 1 a 50 GeV? y entre 1 y 40 grados en θ.
- Localizacion de Archivos: lfn:/grid/ilc/mc-2008/simulated/ILD_00_test/singleparticle/M-06-07-pre01_ppr002_muon_Theta1-40_1-50GeV__ILD_SinglePar_00$i.tar.gz, i=1,..10
- Localización de .slcio: lfn:/grid/ilc/mc-2008/simulated/ILD_00_test/singleparticle/M-06-07-pre01_ppr002_muon_Theta1-40_1-50GeV__ILD_SinglePar_00$i.slcio, i=1,..10
- Página de búsqueda de datasets
- Descargadas en fpmac116.usc.es ~/Samples
Tras la descompresión de los .tar.gz, encontramos 6 ficheros en cada subdirectorio creado:
- err, out: ficheros de salida estándard y errores en la ejecución (via grid) de la simulación.
- .g4 : fichero que contiene los parámetros utilizados en Mokka (Geant4).
- .log: fichero que contiene los mensajes de salida de Mokka (Geant4).
- .steer: fichero de órdenes de Mokka.
- GearOutput.xml: fichero de geometría (GEAR) del detector ILD_00 (en nuestro caso). Éste fichero podemos utilizarlo cuando lancemos Marlin.
2.a. Contenido de las muestras
Podemos mostrar el contenido de las muestras utilizando diferentes herramientas.
2.a.i. Marlin
Ahora ya puedo lanzar Marlin desde cualquier directorio.
Marlin –h
Marlin -h print this help information
Marlin -? print this help information
Marlin -x print an example steering file to stdout
Marlin -c steer.xml check the given steering file for consistency
Marlin -f old.xml new.xml convert old xml files to new xml files for consistency check
Marlin -o old.steer new.xml convert old steering file to xml steering file
Marlin -l [deprecated: old format steering file example]
Marlin -d steer.xml flow.dot create a program flow diagram (see: http://www.graphviz.org)
Marlin -x
Marlin -x > mysteer.xml
Me genera un archivo steering de ejemplo con toda la informacion de los procesadores que llamo:
!--##########################################
# #
# Example steering file for marlin #
# #
##########################################-->
<marlin xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ilcsoft.desy.de/marlin/marlin.xsd">
<execute>
<processor name="MyAIDAProcessor"/>
<processor name="MyTestProcessor"/>
<processor name="MyLCIOOutputProcessor"/>
</execute>
<global>
<parameter name="LCIOInputFiles"> simjob.slcio </parameter>
<!-- limit the number of processed records (run+evt): -->
<parameter name="MaxRecordNumber" value="5001" />
<parameter name="SkipNEvents" value="0" />
<parameter name="SupressCheck" value="false" />
<parameter name="GearXMLFile"> gear_ldc.xml </parameter>
<parameter name="Verbosity" options="DEBUG0-4,MESSAGE0-4,WARNING0-4,ERROR0-4,SILENT"> DEBUG </parameter>
</global>
<processor name="MyAIDAProcessor" type="AIDAProcessor">
<!--Processor that handles AIDA files. Creates on directory per processor. Processors only need to create and fill the histograms, clouds and tuples. Needs to be the first ActiveProcessor-->
<!-- compression of output file 0: false >0: true (default) -->
<parameter name="Compress" type="int">1 </parameter>
<!-- filename without extension-->
<parameter name="FileName" type="string">aida_file </parameter>
<!-- type of output file xml (default) or root ( only OpenScientist)-->
<parameter name="FileType" type="string">xml </parameter>
</processor>
<processor name="MyAbsCalibr" type="AbsCalibr">
<!-- Calorimeter Abslute Energy Calibration-->
<!--Calorimeter coeffs-->
<parameter name="Coeff" type="FloatVec">33.0235 93.5682 21.1963 </parameter>
<!--Calorimeter cuts-->
<parameter name="Cuts" type="FloatVec">8.5e-05 8.5e-05 0.0004375 </parameter>
<!--Number of layers in zone-->
<parameter name="NLayer" type="IntVec">30 10 40 </parameter>
</processor>
<processor name="MyCEDViewer" type="CEDViewer">
<!--CEDViewer: event display of LCIO objects - based on CED by A.Zhelezov.-->
<!--collection to be displayed ( ColName, marker type[0-2], size)-->
<!--parameter name="DrawCollection" type="StringVec">DrawCollection 0 3 </parameter-->
</processor>
<processor name="MyCalorimeterFinalStage" type="CalorimeterFinalStage">
<!--CalorimeterFinalStage -->
<!--Cluster Input Collection Name-->
<parameter name="ClusterInputCollection" type="string" lcioInType="Cluster">CalorimeterStage3Clusters </parameter>
<!--Cluster Output Collection Name-->
<parameter name="ClusterOutputCollection" type="string" lcioOutType="Cluster">ClustersMagic </parameter>
<!--Minimal Hits in Cluster-->
<parameter name="MinimalHits" type="int">0 </parameter>
</processor>
<processor name="MyClusterCheater" type="ClusterCheater">
<!--Creates true clusters...-->
<!--Calorimeter Collection Names-->
<parameter name="CaloCollections" type="StringVec" lcioInType="CalorimeterHit">ECAL HCAL </parameter>
<!--SimCaloHit to CaloHit Relations Collection Name-->
<parameter name="RelCollection" type="string" lcioInType="LCRelation">RelationCaloHit </parameter>
<!--Collection of True Clusters-->
<parameter name="TrueClusterCollection" type="string" lcioOutType="Cluster">TrueClusters </parameter>
<!--Relation Collection Cluster to MCP-->
<parameter name="TrueClusterToMCPCollection" type="string" lcioOutType="LCRelation">TrueClusterToMCP </parameter>
</processor>
...
A continuacion chequeo que el steering tenga consistencia poniendo:
Marlin -c mysteer.xml
Y obtengo el siguiente mensaje de error:
Error opening GEAR file [gear_ldc.xml]. File doesn't exist, or link is not valid!!
Error opening LCIO file [simjob.slcio]. File doesn't exist, or link is not valid!!
Esto es debido a que estos ficheros no estan definidos en el directorio que trabajo (install/my_v01-04), por lo que debo realizar un link suave para tenerlos:
- El fichero gear me define la geometria del detector utilizada durante la simulacion de las muestras de muones. En este caso ha sido la ILD_OO y se
encuentra en los .tar.gz de las muestras de muones, por lo que puedo crear un enlace suave que apunte a cualquiera de los GearOutput?.xml que me descarge en
dichas muestras:
ln -s /donde_se_encuentra_el_GEAROUTPUT/GearOutput.xml gear_ldc.xml
En mi caso:
ln -s ../Samples/M-06-07-pre01_ppr002_muon_Theta1-40_1-50GeV_ILD_00_LCP_SinglePar_0010/GearOutput.xml gear_ldc.xml
- Con respecto al fichero slcio son los ficheros de entrada que contienen en formato LCIO la informacion de la muestra que vaya a analizar, en este caso,
cualquiera de las muestras de muones que me baje, por lo que tambine hare un link suave a alguno de los ficheros lcio.
ln -s ../Samples/SinglePar_muon_Theta1-40_1-50GeV_0001.slcio simjob.slcio.
NOTA:
Evidentemente puedo ponerle el nombre que quiera a los ficheros xml y lcio, pero mantenido los nombre gear_ldc.xml y simjob.slcio no tengo que modificar el fichero steering que me da Marlin en la sección
:
<parameter name="LCIOInputFiles"> simjob.slcio </parameter> ..
<parameter name="GearXMLFile"> gear_ldc.xml </parameter> ..
</global>
Al realizar de nuevo:
Marlin -c mysteer.xml
Ya no me aparece el error en los ficheros simjob.slcio y gear_ldc.xml, pero me aparecen la mayoria de los procesos inactivos:
LCIO Available Collections:
ECAL007 SimCalorimeterHit simjob.slcio
FinalMCParticles MCParticle simjob.slcio
MCParticle MCParticle simjob.slcio
SiliconRawHitExample TrackerPulse simjob.slcio
TPC4711 SimTrackerHit simjob.slcio
TPC4711UserFloatExtension LCFloatVec simjob.slcio
TPC4711UserIntExtension LCIntVec simjob.slcio
TPCRawFADCMCTruth LCRelation simjob.slcio
TrackerDataExample TrackerData simjob.slcio
TrackerPulseExample TrackerPulse simjob.slcio
TrackerRawDataExample TrackerRawData simjob.slcio
AdditionalExtension LCFloatVec simjob.slcio
Active Processors:
MyAIDAProcessor AIDAProcessor [ Active ]
MyTestProcessor TestProcessor [ Active ]
MyLCIOOutputProcessor LCIOOutputProcessor [ Active ]
Inactive Processors:
MyAbsCalibr AbsCalibr [ Inactive ]
MyCEDViewer CEDViewer [ Inactive ]
MyCalorimeterFinalStage CalorimeterFinalStage [ Inactive ]
MyClusterCheater ClusterCheater [ Inactive ]
MyClusterCheater5_3 ClusterCheater5_3 [ Inactive ]
MyConditionsProcessor ConditionsProcessor [ Inactive ]
MyConversionTagger ConversionTagger [ Inactive ]
MyConvertToMIPScale ConvertToMIPScale [ Inactive ]
MyCurlKillerProcessor CurlKillerProcessor [ Inactive ]
MyCutOnCosThetaQQbar CutOnCosThetaQQbar [ Inactive ]
MyCutOnGEANT4Bug CutOnGEANT4Bug [ Inactive ]
MyDSTAIDAPlotProcessor DSTAIDAPlotProcessor [ Inactive ]
MyDSTCollectionProcessor DSTCollectionProcessor [ Inactive ]
MyDSTPlotProcessor DSTPlotProcessor [ Inactive ]
MyDrawMCParticles DrawMCParticles [ Inactive ]
MyEMShowerFinder EMShowerFinder [ Inactive ]
MyETDDigiProcessor ETDDigiProcessor [ Inactive ]
....
No Errors were found :)
Esto es debido a que la variable de entorno MARLIN_DLL carga las librerias dinámicas que le digas, pero eso no quiere decir que ejecute nada de ellas. Para ejecutar algún módulo que esté contenido en alguna librería hay que activarlo en la sección "execute" del fichero steer de Marlin. Por tanto, que un procesador esté inactivo, no es ningún error, está inactivo porque esta cargado en memoria pero no se hace uso de él. Por ejemplo, supón que cargas la librería que contiene el procesador del visor:
export MARLIN_DLL=/mnt/data2/ilcsoft/ilcinstall_prueba/ilcinstall/my_v01-04/CEDViewer/v00-06/lib/libCEDViewer.so
ahora, la librería está cargada en memoria, pero para poder ver los sucesos en el visor, hay que activarlo mediante su inclusión en la sección execute (del fichero steer)en el que aparecen por defecto los siguientes procesadores activos:
<execute>
<processor name="MyAIDAProcessor"/>
<processor name="MyTestProcessor"/>
<processor name="MyLCIOOutputProcessor"/>
</execute>
Por lo que para activar el visor CEDViewer lo añado en el listado anterior de procesadores activos:
<execute>
<processor name="MyAIDAProcessor"/>
<processor name="MyTestProcessor"/>
<processor name="MyCEDViewer" />
<processor name="MyLCIOOutputProcessor"/>
</execute>
NOTA: Para el caso del CEDViewer es importante activarlo despues del resto de procesadores y antes del LCIOOutputProcessor.
Ahora, si lanzo Marlin, veré el procesador activo:
Active Processors:
MyAIDAProcessor AIDAProcessor [ Active ]
MyTestProcessor TestProcessor [ Active ]
MyCEDViewer CEDViewer [ Active ]
MyLCIOOutputProcessor LCIOOutputProcessor [ Active ]
2.a.ii. Dumpevent
La herramienta dumpevent muestra el contenido de un fichero en formato lcio, nos servimos de ella para comprobar que los ficheros que nos hemos descargado sólo contienen hasta la simulación del paso de las partículas a través del detector ILD.
En mi instalación, esta herramienta se encuentra en el subdirectorio: /ilcinstall/my_v01-04/lcio/v01-10-01/bin:
[iglesias@fpmac116 bin]$ dumpevent
usage: dumpevent filename runNum evtNum
or: dumpevent filename n
where the first dumps the event with the specified run and event number
and the second simply dumps the n-th event in the file
Pero puesto que ahora ya he definidos mis variables, puedo lanzarlo desde el directorio de trabajo: /ilcinstall/my_v01-04/.
[iglesias@fpmac116]$ ./dumpevent ../Samples/SinglePar_muon_Theta1-40_1-50GeV_0001.slcio 2
Por lo que para ver el contenido del fichero en formato lcio escribo:
SIOReader::getEventMap() recreating event map for direct access ...
SIOReader::getEventMap() : done
============================================================================
Event : 1 - run: 0 - timestamp 0 - weight 1
============================================================================
date: 01.01.1970 00:00:00.000000000
detector : ILD_00
event parameters:
collection name : ETDCollection
parameters:
--------------- print out of SimTrackerHit collection ---------------
flag: 0xb00
LCIO::THBIT_BARREL : 0
LCIO::THBIT_MOMENTUM : 0
cellID[indices] | position (x,y,z) | dEdx | time | PDG of MCParticle
-----------------------------------------
WARNING: CellIDDecoder - no CellIDEncoding parameter in collection ! -> using default : "byte0:8,byte1:8,byte2:8,byte3:8"
------------------------------------------
0: 1[byte0:1,byte1:0,byte2:0,byte3:0] | (370.141, 790.693, 2426) | 9.19724e-05 | 8.60581 | 13
1: 2[byte0:2,byte1:0,byte2:0,byte3:0] | (370.338, 791.39, 2428) | 8.59193e-05 |8.61291 | 13
2: 3[byte0:3,byte1:0,byte2:0,byte3:0] | (370.533, 792.088, 2430) | 7.71785e-05 | 8.62 | 13
3: 1[byte0:1,byte1:0,byte2:0,byte3:0] | (360.89, 759.687, 2426) | 0.00025424 | 8.78791 | 11
--------------------------------------------------------------------------------
Mostramos parte del contenido del suceso 2. Podemos comprobar que el detector es el ILD, que tenemos una colección de SimTrackerHit (es decir, impactos simulados de trazas) en el subdetector ETD, ofreciéndono información de su energía, el tiempo, su posición absoluta y de qué partícula se trata. El fichero completo nos muestra que únicamente tenemos SimTrackerHit, SimCalorimeterHit y MCParticle. Podemos encontrar una descripción detallada de estas clases en 1. Brevemente,
- La colección MCParticle (que siempre existirá una única por suceso) contiene las partículas del Montecarlo truth que fueron generadas por el generador o que se añadieron (decay in flight) por el programa de simulación, Mokka.
- La clase genérica (y por tanto virtual) SimCalorimeterHit almacena colecciones de impactos en los calorímetros a partir del programa de simulación. Cada subdetector creará una colección de este tipo, por ejemplo, el ECAL de las tapas nos creará una colección de impactos en sus calorímetros llamada EcalEndcapCollection.
- La clase genérica SimTrackerHit almacena impactos de los subdetectores de trayectorias, por ejemplo el subdetector TPC, creará la colección de trazas simuladas TPCCollection.
Para este caso concreto del evento 2 de la muestra SinglePar_muon_Theta1-40_1-50GeV_0001.slcio , me aparece las siguientes colecciones para las clases SimTrackerHit, SimCalorimeterHit y MCParticle:
SimCalorimeterHit:
- EcalEndcapCollection
- EcalEndcapPreShowerCollection
- HcalEndCapsCollection
- MuonEndCapCollection
MCParticle:
SimTrackerHit:
- ETDCollection
- TPCCollection
- VXDCollection
Pero si miramos en el resto de sucesos, encontraremos el resto de las colecciones para los diferentes detectores, por ejemplo SETCollection, SITCollection ... LumiCalCollection ... y otras. La informacion respecto al tipo de colecciones que corresponden a un suceso determinado puede verse en bash con:
dumpevent NombreFichero.slcio n|grep 'collection name'
En mi caso:
dumpevent ../Samples/SinglePar_muon_Theta1-40_1-50GeV_0001.slcio 2|grep 'collection name'
collection name : ETDCollection
collection name : EcalEndcapCollection
collection name : EcalEndcapPreShowerCollection
collection name : HcalEndCapsCollection
collection name : MCParticle
collection name : MuonEndCapCollection
collection name : SITCollection
collection name : TPCCollection
collection name : VXDCollection
Asi mismo, haciedo un loop puedo verlas las colecciones para todos los sucesos de una muetra (hasta 1000 eventos por muestra):
for i in `seq 1 1000`; do dumpevent NombreFichero.slcio $i|grep 'collection name'; done
NOTA: Muy importante: usar las comillas de la tecla de [, sino no hace el loop correctamente
En mi caso:
for i in `seq 1 1000`; do dumpevent ../Samples/SinglePar_muon_Theta1-40_1-50GeV_0001.slcio $i|grep 'collection name'; done
añado echo "$i:” para que me muestre el numero de cada evento que me lee:
for i in `seq 1 1000`; do echo "$i :";dumpevent ../Samples/SinglePar_muon_Theta1-40_1-50GeV_0001.slcio $i |grep 'collection name' ; done
37 :
collection name : ETDCollection
collection name : EcalEndcapCollection
collection name : EcalEndcapPreShowerCollection
collection name : FTDCollection
collection name : HcalEndCapsCollection
collection name : MCParticle
collection name : MuonEndCapCollection
collection name : TPCCollection
collection name : VXDCollection
38 :
collection name : LHcalCollection
collection name : LumiCalCollection
collection name : MCParticle
collection name : MuonEndCapCollection
39 :
collection name : ETDCollection
collection name : EcalEndcapCollection
collection name : EcalEndcapPreShowerCollection
collection name : HcalEndCapsCollection
collection name : MCParticle
collection name : MuonEndCapCollection
collection name : TPCCollection
collection name : VXDCollection
40 :
collection name : ETDCollection
collection name : EcalEndcapCollection
collection name : EcalEndcapPreShowerCollection
collection name : HcalEndCapsCollection
collection name : MCParticle
collection name : MuonEndCapCollection
collection name : TPCCollection
collection name : TPCSpacePointCollection
2.a.iii. Visor de Eventos
CED es el visor de sucesos dentro del entorno Marlin. Muestra una ventanita con lo que tengas descrito del detector y trazas, hits, etc... resultado de la reconstruccion. CED usa OpenGL y la herramienta GLUT (OpenGL Utility Toolkit), por lo que para correr CED GLUT previamente lo debes tener intalada en tu sistema.
Si ejecutamos Marlin -x, nos devolverá un ejemplo de fichero steer con todos los procesadores que tenemos cargados (tanto estática como dinámicamente); cada vez que carguemos un nuevo procesador, via la variable de entorno MARLIN_DLL, nos aparecerá en el fichero steer de ejemplo. Así, si lo ejecutamos después de incluir la librería del visor, veremos que disponemos de unos cuantos procesadores relacionados con el visor de sucesos: GenericViewer, CEDViewer, VertexViewer, DrawMCParticles, ... . Centrándonos en CEDViewer, activamos el procesador en la etiqueta execute del fichero steer (ver apartado sobre Marlin), y elegimos que colecciones vamos a visualizar (para extraer las colecciones de cada suceso ver apartado sobre Dumpevent). Para especificar que colecciones quiero visualiza voy alfichero steer, y bajo la definición del procesador CEDViewer:
<processor name="MyCEDViewer" type="CEDViewer...>
....
</processor>
puedo poner las colecciones que quieres visualizar, por ejemplo:
<parameter name="DrawCollection" type="StringVec">TPCTracks 0 2</parameter>
el 0 se refiere al tipo de linea (0-linea, 1-linea punteada, 2- no sé) y el 2 se refiere al tamaño de linea. Cuando tengas listas
todas las colecciones que quieres que aparezcan, ejecutas Marlin y verás que en la ventana que tenías abierta te apareceran los sucesos (ves un suceso y Marlin espera hasta que apretes enter para procesar el siguiente....).
Para utilizar el visor de sucesos, antes de ejecutar Marlin, lanzas
glced &
(dejándolo en segundo plano), te aparece la ventana que se rellenará cuando ejecutes Marlin con el procesador CEDViewer activado
Marlin mysteer.xml
NOTA:Recuerda que cuando haces Marlin -c, estás comprobando el fichero steer pero NO ejecutas Marlin.
Ahora el suceso es mostrado en la ventana CED despues de finalizar la reconstruccion de trazas, clusters y objetos particle flow. Para manipular el evento en pantalla, se puede usar el raton (siempre que este colocado dentro de la ventana CED) o ciertos comnados del teclado:
- Usando el raton:
- boton izquierdo de raton: rotar
- boton central del raton: trasladas
- boton derecho del raton: aumentar
- Usando los comandos del teclado:
- ESC : front view. Projection of all points on the -plane.
- s: side view. Projection of all points on the -plane.
- c: centre view. A new origin for a rotation and zoom is set to the current position of the mouse cursor.
- r: redisplay in some initial projection.
- 0, 1, ... toggle layers. The assignment of the layers is done in the steering file
After an event is displayed, the system waits until the user hits a key to continue. Please note, that since the event display is realised as a Marlin processor, the reconstruction is also stopped as long as the computer waits for the user entry to continue.
-- Main.iglesias - 11 Dec 2008
to top