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.
La estructura general de un steering file es la siguiente:
- Execute Section: In this section the names of the processors which are to be executed are listed using the keyword processor. The order of the processor names in the XML-file in this section controls the order of executing the processors. The next example specifies three processors which are called in the order (1) MyAIDAProcessor?, (2) MyTestProcessor?, (3) MyLCIOOutputProcessor?.
<execute>
<processor name="MyAIDAProcessor"/>
<processor name="MyTestProcessor"/>
<processor name="MyLCIOOutputProcessor"/>
</execute>
- Global Section: Here all the global settings are made:
- Specification of the LCIO input files (including paths) which contain the event data
- The number of events which are to be processed
- Turn on/off check routines to produce control plots etc.
A typical global section could look like this:
<global>
<parameter name="LCIOInputFiles"> simjob.slcio </parameter>
<parameter name="MaxRecordNumber" value="5001" />
<parameter name="SupressCheck" value="false" />
</global>
- Processor Section: *This section contains several blocks named processor. Every block configures a certain processor and gives it a unique name. These names are used in the execute section to call the processor. Here one processor can be configured more than once using different names as identifier. In this way a processor can be called several times with different parameters. This can be useful to optimise cuts or to use the same algorithm for different input collections. Steering parameters of processors can be of type string, int or float. A typical processor section can look like this, where the example describes the configuration of the processor of type ClusterCheater?.
<processor name="MyClusterCheater" type="ClusterCheater">
<!--Creates true clusters...-->
<!--Calorimeter Collection Names-->
<parameter name="CaloCollections" type="StringVec">ECAL HCAL </parameter>
<!--Magnetic Field-->
<parameter name="MagneticField" type="float">4 </parameter>
<!--Minimal Hits in Cluster-->
<parameter name="MinimalHits" type="int">10 </parameter>
<!--Hit To Cluster Proximity Cut-->
<parameter name="ProximityCut" type="float">1200 </parameter>
<!--SimCaloHit to CaloHit Relations Collection Name-->
<parameter name="RelCollection" type="string">RelationCaloHit </parameter>
<!--Trace Whole Shower Tree-->
<parameter name="TraceWholeShower" type="int">1 </parameter>
<!--Collection of True Clusters-->
<parameter name="TrueClusterCollection" type="string">TrueClusters </parameter>
</processor>
It can be called in the execute section using the name
MyClusterCheater?:
<execute>
. . .
<processor name="MyClusterCheater"/>
. . .
</execute>
In the definition of a parameter not only its name and value is specified but also the type of the expected input(s).
!--##########################################
# #
# 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 ]
-- Main.iglesias - 02 Feb 2009
to top