first implementation of MusrRoot. Cleaner handling of Red/Green mode data. General cleanup
This commit is contained in:
40
src/external/MusrRoot/Makefile.am
vendored
Normal file
40
src/external/MusrRoot/Makefile.am
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
## Process this file with automake to create Makefile.in
|
||||
## $Id$
|
||||
|
||||
h_sources = \
|
||||
TMusrRunHeader.h
|
||||
|
||||
h_linkdef = \
|
||||
TMusrRunHeaderLinkDef.h
|
||||
|
||||
dict_h_sources = \
|
||||
TMusrRunHeaderDict.h
|
||||
|
||||
cpp_sources = \
|
||||
TMusrRunHeader.cpp
|
||||
|
||||
dict_cpp_sources = \
|
||||
TMusrRunHeaderDict.cpp
|
||||
|
||||
include_HEADERS = $(h_sources)
|
||||
noinst_HEADERS = $(h_linkdef) $(dict_h_sources)
|
||||
|
||||
INCLUDES = -I. $(ROOT_CFLAGS)
|
||||
AM_CXXFLAGS = $(LOCAL_LIB_CXXFLAGS)
|
||||
|
||||
BUILT_SOURCES = $(dict_cpp_sources) $(dist_h_sources)
|
||||
AM_LDFLAGS = $(LOCAL_LIB_LDFLAGS) -L@ROOTLIBDIR@
|
||||
CLEANFILES = *Dict.cpp *Dict.h *~ core
|
||||
|
||||
%Dict.cpp %Dict.h: %.h %LinkDef.h
|
||||
@ROOTCINT@ -v -f $*Dict.cpp -c -p $(INCLUDES) $^
|
||||
|
||||
lib_LTLIBRARIES = libTMusrRunHeader.la
|
||||
|
||||
libTMusrRunHeader_la_SOURCES = $(h_sources) $(cpp_sources) $(dict_h_sources) $(dict_cpp_sources)
|
||||
libTMusrRunHeader_la_LIBADD = $(ROOT_LIBS)
|
||||
libTMusrRunHeader_la_LDFLAGS = -version-info $(MUSR_ROOT_LIBRARY_VERSION) -release $(MUSR_ROOT_RELEASE) $(AM_LDFLAGS)
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = TMusrRunHeader.pc
|
||||
|
||||
196
src/external/MusrRoot/MusrRoot.xsd
vendored
Normal file
196
src/external/MusrRoot/MusrRoot.xsd
vendored
Normal file
@@ -0,0 +1,196 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
This XSD document describes the muSR file structure for CERN/ROOT based files.
|
||||
In the following it will be called MusrRoot.
|
||||
It is currently the default standard for writting muSR data files at the
|
||||
Paul Scherrer Institute.
|
||||
|
||||
Author: Andreas Suter, andreas.suter@psi.ch
|
||||
$Id: MusrRoot.xsd 5092 2012-03-13 07:47:00Z nemu $
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
|
||||
<xs:element name="MusrRoot" type="musrRoot"/>
|
||||
|
||||
<xs:complexType name="musrRoot">
|
||||
<xs:sequence>
|
||||
<xs:element ref="histos"/>
|
||||
<xs:element name="RunHeader" type="runHeaderFolder"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="histos">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The histos folder is containing potentially various subfolders.
|
||||
At least two subfolders, called DecayAnaModule, and SlowControlAnaModule,
|
||||
which holds the muSR decay histograms, must be present.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="DecayAnaModule" type="decayHistoData"/>
|
||||
<xs:element name="SCAnaModule" type="slowControlHistoData"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:complexType name="decayHistoData">
|
||||
<xs:sequence>
|
||||
<xs:element name="DecayHistoEntry" type="decayHistoEntry" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="decayHistoEntry">
|
||||
<xs:sequence>
|
||||
<xs:element name="HistoName" type="histoName"/>
|
||||
<xs:element name="HistoType" type="histoType"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="histoName">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="hDecay([0-9]){3,}"/> <!-- this means hDecayXXX, where XXX are 3 digits -->
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="histoType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="TH1F"></xs:pattern>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="slowControlHistoData">
|
||||
<xs:sequence>
|
||||
<xs:element name="SlowControlHistoEntry" type="slowControlHistoEntry" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="slowControlHistoEntry">
|
||||
<xs:sequence>
|
||||
<xs:element name="SlowControlName" type="xs:string"/>
|
||||
<xs:element name="SlowControlType" type="slowControlType"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="slowControlType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="TH1F"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="runHeaderFolder">
|
||||
<xs:sequence>
|
||||
<xs:element name="RunInfo" type="runInfo"/>
|
||||
<xs:element name="DetectorInfo" type="detectorInfo"/>
|
||||
<xs:element name="SampleEnvironmentInfo" type="sampleEnvironmentInfo"/>
|
||||
<xs:element name="MagneticFieldEnvironmentInfo" type="magneticFieldEnvironmentInfo"/>
|
||||
<xs:element name="BeamlineInfo" type="beamlineInfo"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="runInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="Version" type="TString"/>
|
||||
<xs:element name="Generic_Validator_URL" type="TString"/>
|
||||
<xs:element name="Specific_Validator_URL" type="TString"/>
|
||||
<xs:element name="Generator" type="TString"/>
|
||||
<xs:element name="File_Name" type="TString"/>
|
||||
<xs:element name="Run_Title" type="TString"/>
|
||||
<xs:element name="Run_Number" type="Int_t"/>
|
||||
<xs:element name="Run_Start_Time" type="TString"/>
|
||||
<xs:element name="Run_Stop_Time" type="TString"/>
|
||||
<xs:element name="Run_Duration" type="TMusrRunPhysicalQuantity"/>
|
||||
<xs:element name="Laboratory" type="TString"/>
|
||||
<xs:element name="Area" type="TString"/>
|
||||
<xs:element name="Instrument" type="TString"/>
|
||||
<xs:element name="Muon_Beam_Momentum" type="TMusrRunPhysicalQuantity"/>
|
||||
<xs:element name="Muon_Species" type="TString"/>
|
||||
<xs:element name="Muon_Source" type="TString"/>
|
||||
<xs:element name="Setup" type="TString"/>
|
||||
<xs:element name="Comment" type="TString"/>
|
||||
<xs:element name="Sample_Name" type="TString"/>
|
||||
<xs:element name="Sample_Temperature" type="TMusrRunPhysicalQuantity"/>
|
||||
<xs:element name="Sample_Magnetic_Field" type="TMusrRunPhysicalQuantity"/>
|
||||
<xs:element name="No_of_Histos" type="Int_t"/>
|
||||
<xs:element name="Time_Resolution" type="TMusrRunPhysicalQuantity"/>
|
||||
<xs:element name="RedGreen_Offsets" type="TIntVector"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="Int_t">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="Int_t"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Double_t">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="Double_t"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="TString">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="TString"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="TMusrRunPhysicalQuantity">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="TMusrRunPhysicalQuantity"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="TIntVector">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="TIntVector"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="sampleEnvironmentInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="Cryo" type="TString"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="magneticFieldEnvironmentInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="Magnet_Name" type="TString"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="detectorInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="Detector" type="detector" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="detector">
|
||||
<xs:sequence>
|
||||
<xs:element name="Name" type="TString"/>
|
||||
<xs:element name="Histo_Number" type="Int_t"/>
|
||||
<xs:element name="Histo_Length" type="Int_t"/>
|
||||
<xs:element name="Time_Zero_Bin" type="Double_t"/>
|
||||
<xs:element name="First_Good_Bin" type="Int_t"/>
|
||||
<xs:element name="Last_Good_Bin" type="Int_t"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="beamlineInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="Name" type="TString"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
||||
222
src/external/MusrRoot/MusrRootLEM.xsd
vendored
Normal file
222
src/external/MusrRoot/MusrRootLEM.xsd
vendored
Normal file
@@ -0,0 +1,222 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
This XSD document describes the muSR file structure of CERN/ROOT based files for LEM.
|
||||
In the following it will be called MusrRootLEM.
|
||||
It is an extension of MusrRoot.xsd and describes the additional LEM specific entries.
|
||||
|
||||
Author: Andreas Suter, andreas.suter@psi.ch
|
||||
$Id: MusrRootLEM.xsd 5092 2012-03-13 07:47:00Z nemu $
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
|
||||
<xs:element name="MusrRoot" type="musrRoot"/>
|
||||
|
||||
<xs:complexType name="musrRoot">
|
||||
<xs:sequence>
|
||||
<xs:element ref="histos"/>
|
||||
<xs:element name="RunHeader" type="runHeaderFolder"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="histos">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The histos folder is containing potentially various subfolders.
|
||||
At least two subfolders, called DecayAnaModule, and SlowControlAnaModule,
|
||||
which holds the muSR decay histograms, must be present.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="DecayAnaModule" type="decayHistoData"/>
|
||||
<xs:element name="SCAnaModule" type="slowControlHistoData"/>
|
||||
<xs:element name="TOFAnaModule" type="histoData"/>
|
||||
<xs:element name="PileUpAnaModule" type="histoData"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:complexType name="decayHistoData">
|
||||
<xs:sequence>
|
||||
<xs:element name="DecayHistoEntry" type="decayHistoEntry" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="decayHistoEntry">
|
||||
<xs:sequence>
|
||||
<xs:element name="HistoName" type="histoName"/>
|
||||
<xs:element name="HistoType" type="histoType"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="histoName">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="hDecay([0-9]){3,}"/> <!-- this means hDecayXXX, where XXX are 3 digits or more -->
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="histoType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="TH1F"></xs:pattern>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="slowControlHistoData">
|
||||
<xs:sequence>
|
||||
<xs:element name="SlowControlHistoEntry" type="slowControlHistoEntry" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="slowControlHistoEntry">
|
||||
<xs:sequence>
|
||||
<xs:element name="SlowControlName" type="xs:string"/>
|
||||
<xs:element name="SlowControlType" type="slowControlType"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="slowControlType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="TH1F"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="runHeaderFolder">
|
||||
<xs:sequence>
|
||||
<xs:element name="RunInfo" type="runInfo"/>
|
||||
<xs:element name="DetectorInfo" type="detectorInfo"/>
|
||||
<xs:element name="SampleEnvironmentInfo" type="sampleEnvironmentInfo"/>
|
||||
<xs:element name="MagneticFieldEnvironmentInfo" type="magneticFieldEnvironmentInfo"/>
|
||||
<xs:element name="BeamlineInfo" type="beamlineInfo"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="runInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="Version" type="TString"/>
|
||||
<xs:element name="Generic_Validator_URL" type="TString"/>
|
||||
<xs:element name="Specific_Validator_URL" type="TString"/>
|
||||
<xs:element name="Generator" type="TString"/>
|
||||
<xs:element name="File_Name" type="TString"/>
|
||||
<xs:element name="Run_Title" type="TString"/>
|
||||
<xs:element name="Run_Number" type="Int_t"/>
|
||||
<xs:element name="Run_Start_Time" type="TString"/>
|
||||
<xs:element name="Run_Stop_Time" type="TString"/>
|
||||
<xs:element name="Run_Duration" type="TMusrRunPhysicalQuantity"/>
|
||||
<xs:element name="Laboratory" type="TString"/>
|
||||
<xs:element name="Area" type="TString"/>
|
||||
<xs:element name="Instrument" type="TString"/>
|
||||
<xs:element name="Muon_Beam_Momentum" type="TMusrRunPhysicalQuantity"/>
|
||||
<xs:element name="Muon_Species" type="TString"/>
|
||||
<xs:element name="Muon_Source" type="TString"/>
|
||||
<xs:element name="Setup" type="TString"/>
|
||||
<xs:element name="Comment" type="TString"/>
|
||||
<xs:element name="Sample_Name" type="TString"/>
|
||||
<xs:element name="Sample_Temperature" type="TMusrRunPhysicalQuantity"/>
|
||||
<xs:element name="Sample_Magnetic_Field" type="TMusrRunPhysicalQuantity"/>
|
||||
<xs:element name="No_of_Histos" type="Int_t"/>
|
||||
<xs:element name="Time_Resolution" type="TMusrRunPhysicalQuantity"/>
|
||||
<xs:element name="RedGreen_Offsets" type="TIntVector"/>
|
||||
<xs:element name="Moderator" type="TString"/>
|
||||
<xs:element name="Moderator_HV" type="TMusrRunPhysicalQuantity"/>
|
||||
<xs:element name="Sample_HV" type="TMusrRunPhysicalQuantity"/>
|
||||
<xs:element name="Implantation_Energy" type="TMusrRunPhysicalQuantity"/>
|
||||
<xs:element name="Cuts" type="TString"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="Int_t">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="Int_t"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Double_t">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="Double_t"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="TString">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="TString"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="TMusrRunPhysicalQuantity">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="TMusrRunPhysicalQuantity"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="TIntVector">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="TIntVector"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="sampleEnvironmentInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="Cryo" type="TString"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="magneticFieldEnvironmentInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="Magnet_Name" type="TString"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="detectorInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="Detector" type="detector" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="detector">
|
||||
<xs:sequence>
|
||||
<xs:element name="Name" type="TString"/>
|
||||
<xs:element name="Histo_Number" type="Int_t"/>
|
||||
<xs:element name="Histo_Length" type="Int_t"/>
|
||||
<xs:element name="Time_Zero_Bin" type="Double_t"/>
|
||||
<xs:element name="First_Good_Bin" type="Int_t"/>
|
||||
<xs:element name="Last_Good_Bin" type="Int_t"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="beamlineInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="Name" type="TString"/>
|
||||
<xs:element name="Beamline_Settings" type="TString"/>
|
||||
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> <!-- here can go any additional stuff you like -->
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="histoData">
|
||||
<xs:sequence>
|
||||
<xs:element name="Entry" type="histoEntry" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="histoEntry">
|
||||
<xs:sequence>
|
||||
<xs:element name="Name" type="xs:string"/>
|
||||
<xs:element name="Type" type="rootHistoType"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="rootHistoType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="TH([1-2])F"/> <!-- this means TH1F or TH2F -->
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:schema>
|
||||
1691
src/external/MusrRoot/TMusrRunHeader.cpp
vendored
Normal file
1691
src/external/MusrRoot/TMusrRunHeader.cpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
196
src/external/MusrRoot/TMusrRunHeader.h
vendored
Normal file
196
src/external/MusrRoot/TMusrRunHeader.h
vendored
Normal file
@@ -0,0 +1,196 @@
|
||||
/***************************************************************************
|
||||
|
||||
TMusrRunHeader.h
|
||||
|
||||
Author: Andreas Suter
|
||||
e-mail: andreas.suter@psi.ch
|
||||
|
||||
$Id: TMusrRunHeader.h 5092 2012-03-13 07:47:00Z nemu $
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2007-2012 by Andreas Suter *
|
||||
* andreas.suter@psi.ch *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef TMUSRRUNHEADER_H
|
||||
#define TMUSRRUNHEADER_H
|
||||
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
|
||||
#include <TDatime.h>
|
||||
#include <TObject.h>
|
||||
#include <TQObject.h>
|
||||
#include <TObjString.h>
|
||||
#include <TObjArray.h>
|
||||
#include <TFolder.h>
|
||||
|
||||
#define MRH_UNDEFINED -9.99e99
|
||||
|
||||
#define MRH_DOUBLE_PREC 6
|
||||
|
||||
#define MRH_TSTRING 0
|
||||
#define MRH_INT 1
|
||||
#define MRH_DOUBLE 2
|
||||
#define MRH_TMUSR_RUN_PHYSICAL_QUANTITY 3
|
||||
#define MRH_TSTRING_VECTOR 4
|
||||
#define MRH_INT_VECTOR 5
|
||||
#define MRH_DOUBLE_VECTOR 6
|
||||
|
||||
typedef vector<Int_t> TIntVector;
|
||||
typedef vector<Double_t> TDoubleVector;
|
||||
typedef vector<TString> TStringVector;
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
template <class T> class TMusrRunObject : public TObject
|
||||
{
|
||||
public:
|
||||
TMusrRunObject() { fPathName = "n/a"; fType = "n/a"; }
|
||||
TMusrRunObject(TString pathName, TString type, T value) : fPathName(pathName), fType(type), fValue(value) {}
|
||||
virtual ~TMusrRunObject() {}
|
||||
|
||||
virtual TString GetPathName() { return fPathName; }
|
||||
virtual TString GetType() { return fType; }
|
||||
virtual T GetValue() { return fValue; }
|
||||
|
||||
virtual void SetPathName(TString pathName) { fPathName = pathName; }
|
||||
virtual void SetType(TString type) { fType = type; }
|
||||
virtual void SetValue(T value) { fValue = value; }
|
||||
|
||||
private:
|
||||
TString fPathName; ///< path name of the variable, e.g. 'RunInfo/Run Number'
|
||||
TString fType; ///< type of value, e.g. TString, or Int_t, etc.
|
||||
T fValue; ///< value itself
|
||||
};
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
class TMusrRunPhysicalQuantity : public TObject
|
||||
{
|
||||
public:
|
||||
TMusrRunPhysicalQuantity();
|
||||
TMusrRunPhysicalQuantity(TString label, Double_t demand, Double_t value, Double_t error, TString unit, TString description = TString("n/a"));
|
||||
TMusrRunPhysicalQuantity(TString label, Double_t demand, Double_t value, TString unit, TString description = TString("n/a"));
|
||||
TMusrRunPhysicalQuantity(TString label, Double_t value, TString unit, TString description = TString("n/a"));
|
||||
virtual ~TMusrRunPhysicalQuantity() {}
|
||||
|
||||
virtual TString GetLabel() const { return fLabel; }
|
||||
virtual Double_t GetDemand() const { return fDemand; }
|
||||
virtual Double_t GetValue() const { return fValue; }
|
||||
virtual Double_t GetError() const { return fError; }
|
||||
virtual TString GetUnit() const { return fUnit; }
|
||||
virtual TString GetDescription() const { return fDescription; }
|
||||
|
||||
virtual void Set(TString label, Double_t demand, Double_t value, Double_t error, TString unit, TString description = TString("n/a"));
|
||||
virtual void Set(TString label, Double_t demand, Double_t value, TString unit, TString description = TString("n/a"));
|
||||
virtual void Set(TString label, Double_t value, TString unit, TString description = TString("n/a"));
|
||||
virtual void SetLabel(TString &label) { fLabel = label; }
|
||||
virtual void SetLabel(const char *label) { fLabel = label; }
|
||||
virtual void SetDemand(Double_t val) { fDemand = val; }
|
||||
virtual void SetValue(Double_t val) { fValue = val; }
|
||||
virtual void SetError(Double_t err) { fError = err; }
|
||||
virtual void SetUnit(TString &unit) { fUnit = unit; }
|
||||
virtual void SetUnit(const char *unit) { fUnit = unit; }
|
||||
virtual void SetDescription(TString &str) { fDescription = str; }
|
||||
virtual void SetDescription(const char *str) { fDescription = str; }
|
||||
|
||||
private:
|
||||
TString fLabel; ///< property label, like ’Sample Temperature’ etc.
|
||||
Double_t fDemand; ///< demand value of the physical quantity, e.g. temperature setpoint
|
||||
Double_t fValue; ///< measured value of the physical quantity
|
||||
Double_t fError; ///< estimated error (standard deviation) of the measured value
|
||||
TString fUnit; ///< unit of the physical quantity
|
||||
TString fDescription; ///< a more detailed description of the physical quantity
|
||||
|
||||
ClassDef(TMusrRunPhysicalQuantity, 1)
|
||||
};
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
class TMusrRunHeader : public TObject
|
||||
{
|
||||
public:
|
||||
TMusrRunHeader(bool quite=false);
|
||||
TMusrRunHeader(const char *fileName, bool quite=false);
|
||||
virtual ~TMusrRunHeader();
|
||||
|
||||
virtual TString GetFileName() { return fFileName; }
|
||||
|
||||
virtual Bool_t FillFolder(TFolder *folder);
|
||||
|
||||
virtual Bool_t ExtractAll(TFolder *folder);
|
||||
virtual Bool_t ExtractHeaderInformation(TObjArray *headerInfo, TString path);
|
||||
|
||||
virtual void Get(TString pathName, TString &value, Bool_t &ok);
|
||||
virtual void Get(TString pathName, Int_t &value, Bool_t &ok);
|
||||
virtual void Get(TString pathName, Double_t &value, Bool_t &ok);
|
||||
virtual void Get(TString pathName, TMusrRunPhysicalQuantity &value, Bool_t &ok);
|
||||
virtual void Get(TString pathName, TStringVector &value, Bool_t &ok);
|
||||
virtual void Get(TString pathName, TIntVector &value, Bool_t &ok);
|
||||
virtual void Get(TString pathName, TDoubleVector &value, Bool_t &ok);
|
||||
|
||||
virtual void SetFileName(TString fln) { fFileName = fln; }
|
||||
|
||||
virtual void Set(TString pathName, TString value);
|
||||
virtual void Set(TString pathName, Int_t value);
|
||||
virtual void Set(TString pathName, Double_t value);
|
||||
virtual void Set(TString pathName, TMusrRunPhysicalQuantity value);
|
||||
virtual void Set(TString pathName, TStringVector value);
|
||||
virtual void Set(TString pathName, TIntVector value);
|
||||
virtual void Set(TString pathName, TDoubleVector value);
|
||||
|
||||
virtual void DumpHeader();
|
||||
virtual void DrawHeader();
|
||||
|
||||
private:
|
||||
bool fQuite;
|
||||
TString fFileName;
|
||||
TString fVersion;
|
||||
|
||||
vector< TMusrRunObject<TString> > fStringObj;
|
||||
vector< TMusrRunObject<Int_t> > fIntObj;
|
||||
vector< TMusrRunObject<Double_t> > fDoubleObj;
|
||||
vector< TMusrRunObject<TMusrRunPhysicalQuantity> > fMusrRunPhysQuantityObj;
|
||||
vector< TMusrRunObject<TStringVector> > fStringVectorObj;
|
||||
vector< TMusrRunObject<TIntVector> > fIntVectorObj;
|
||||
vector< TMusrRunObject<TDoubleVector> > fDoubleVectorObj;
|
||||
|
||||
vector< TString > fPathNameOrder; ///< keeps the path-name as they were created in ordered to keep ordering
|
||||
|
||||
virtual void Init(TString str="n/a");
|
||||
virtual void CleanUp();
|
||||
|
||||
virtual UInt_t GetDecimalPlace(Double_t val);
|
||||
virtual UInt_t GetLeastSignificantDigit(Double_t val) const;
|
||||
virtual void SplitPathName(TString pathName, TString &path, TString &name);
|
||||
|
||||
virtual TString GetLabel(TString str);
|
||||
virtual TString GetStrValue(TString str);
|
||||
virtual TString GetType(TString str);
|
||||
|
||||
virtual bool UpdateFolder(TObject *treeObj, TString path);
|
||||
virtual TObject* FindObject(TObject *treeObj, TString path);
|
||||
virtual TObjString GetHeaderString(UInt_t idx);
|
||||
|
||||
virtual bool RemoveFirst(TString &str, const char splitter);
|
||||
virtual TString GetFirst(TString &str, const char splitter);
|
||||
|
||||
ClassDef(TMusrRunHeader, 1)
|
||||
};
|
||||
|
||||
#endif // TMUSRRUNHEADER_H
|
||||
10
src/external/MusrRoot/TMusrRunHeader.pc.in
vendored
Normal file
10
src/external/MusrRoot/TMusrRunHeader.pc.in
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: TMusrRunHeader
|
||||
Description: C++ shared library providing the MusrRoot Run Header class
|
||||
Version: @MUSR_ROOT_VERSION@
|
||||
Libs: -L${libdir} -l@MUSR_ROOT_LIBRARY_NAME@
|
||||
Cflags: -I${includedir}
|
||||
41
src/external/MusrRoot/TMusrRunHeaderLinkDef.h
vendored
Normal file
41
src/external/MusrRoot/TMusrRunHeaderLinkDef.h
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
/***************************************************************************
|
||||
|
||||
TMusrRunHeaderLinkDef.h
|
||||
|
||||
Author: Andreas Suter
|
||||
e-mail: andreas.suter@psi.ch
|
||||
|
||||
$Id: TMusrRunHeaderLinkDef.h 5054 2012-01-18 07:43:50Z suter_a $
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2007-2012 by Andreas Suter *
|
||||
* andreas.suter@psi.ch *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifdef __CINT__
|
||||
|
||||
#pragma link off all globals;
|
||||
#pragma link off all classes;
|
||||
#pragma link off all functions;
|
||||
|
||||
#pragma link C++ class TMusrRunPhysicalQuantity+;
|
||||
#pragma link C++ class TMusrRunHeader+;
|
||||
|
||||
#endif
|
||||
318
src/external/MusrRoot/root2xml.C
vendored
Normal file
318
src/external/MusrRoot/root2xml.C
vendored
Normal file
@@ -0,0 +1,318 @@
|
||||
// quick and dirty ROOT -> XML converter for MusrRoot
|
||||
// needs to be rewritten as proper program.
|
||||
//
|
||||
// Andreas Suter
|
||||
//
|
||||
// $Id: root2xml.C 5092 2012-03-13 07:47:00Z nemu $
|
||||
|
||||
vector<string> xml_data;
|
||||
|
||||
enum EFolderTag {eUnkown, eDecayAnaModule, eSlowControlAnaModule};
|
||||
enum ERunHeaderTag {eUnkown, eRunInfo, eSampleEnvironmentInfo, eMagneticFieldEnvironmentInfo, eBeamlineInfo, eScalerInfo};
|
||||
EFolderTag folderTag = eUnkown;
|
||||
ERunHeaderTag runHeaderTag = eUnkown;
|
||||
|
||||
void root2xml(const char *filename, const char *xmlFilename)
|
||||
{
|
||||
TFile f(filename);
|
||||
|
||||
if (f.IsZombie()) {
|
||||
cout << endl << "**ERROR** couldn't open file " << filename << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
xml_data.clear();
|
||||
|
||||
xml_data.push_back("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
|
||||
xml_data.push_back("<MusrRoot xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"file:MusrRoot.xsd\">");
|
||||
|
||||
TIter next = f.GetListOfKeys();
|
||||
TKey *key;
|
||||
TFolder *folder;
|
||||
TString str, tag;
|
||||
|
||||
UInt_t offset = 2;
|
||||
|
||||
while (key = (TKey*) next()) {
|
||||
cout << endl << "name: " << key->GetName() << ", class name: " << key->GetClassName();
|
||||
str = key->GetClassName();
|
||||
if (str == "TFolder") {
|
||||
folder = (TFolder*)key->ReadObj();
|
||||
checkClass(folder, str, offset);
|
||||
}
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
f.Close();
|
||||
|
||||
xml_data.push_back("</MusrRoot>");
|
||||
|
||||
// the sort_histo_folders is needed since XML-Schema is not flexible enough to handle
|
||||
// histos -|
|
||||
// |- DecayAnaModule
|
||||
// ... (any other analyzer module sub-folder
|
||||
// |- SCAnaModule
|
||||
// Hence SCAnaModule has artificially moved up, just to follow DecayAnaModule
|
||||
sort_histo_folders();
|
||||
|
||||
ofstream fout(xmlFilename);
|
||||
|
||||
for (UInt_t i=0; i<xml_data.size(); i++)
|
||||
fout << xml_data[i] << endl;
|
||||
fout.close();
|
||||
}
|
||||
|
||||
void sort_histo_folders()
|
||||
{
|
||||
vector<string> temp_xml_data;
|
||||
|
||||
// first make a copy of the original xml_data
|
||||
for (unsigned int i=0; i<xml_data.size(); i++)
|
||||
temp_xml_data.push_back(xml_data[i]);
|
||||
|
||||
// remove SCAnaModule from temp_xml_data
|
||||
unsigned int start = 0, end = 0;
|
||||
for (unsigned int i=0; i<temp_xml_data.size(); i++) {
|
||||
if (temp_xml_data[i].find("<SCAnaModule>") != string::npos)
|
||||
start = i;
|
||||
if (temp_xml_data[i].find("</SCAnaModule>") != string::npos)
|
||||
end = i+1;
|
||||
}
|
||||
if ((start > 0) && (end > 0))
|
||||
temp_xml_data.erase(temp_xml_data.begin()+start, temp_xml_data.begin()+end);
|
||||
else // no SCAnaModule present, hence nothing to be done
|
||||
return;
|
||||
|
||||
// insert SCAnaModule just after DecayAnaModule
|
||||
// 1st find end of DecayAnaModule
|
||||
unsigned int pos = 0;
|
||||
for (unsigned int i=0; i<temp_xml_data.size(); i++) {
|
||||
if (temp_xml_data[i].find("</DecayAnaModule>") != string::npos) {
|
||||
pos = i+1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (pos == 0) // something is wrong, hence to not do anything
|
||||
return;
|
||||
temp_xml_data.insert(temp_xml_data.begin()+pos, xml_data.begin()+start, xml_data.begin()+end);
|
||||
|
||||
// copy temp_xml_data back into xml_data
|
||||
xml_data.clear();
|
||||
for (unsigned int i=0; i<temp_xml_data.size(); i++)
|
||||
xml_data.push_back(temp_xml_data[i]);
|
||||
|
||||
// clean up
|
||||
temp_xml_data.clear();
|
||||
}
|
||||
|
||||
void dumpFolder(TFolder *folder, UInt_t offset)
|
||||
{
|
||||
TString offsetStr="";
|
||||
for (UInt_t i=0; i<offset; i++)
|
||||
offsetStr += " ";
|
||||
|
||||
TIter next = folder->GetListOfFolders();
|
||||
TObject *obj;
|
||||
TString str;
|
||||
while (obj = (TObject*) next()) {
|
||||
cout << endl << offsetStr << "name: " << obj->GetName() << ", class name: " << obj->ClassName();
|
||||
str = obj->ClassName();
|
||||
checkClass(obj, str, offset);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void dumpObjArray(TObjArray *obj, UInt_t offset)
|
||||
{
|
||||
TString offsetStr="";
|
||||
for (UInt_t i=0; i<offset; i++)
|
||||
offsetStr += " ";
|
||||
|
||||
TObjString *tstr;
|
||||
TString str, xmlStr, type, label, xmlLabel;
|
||||
|
||||
// check if the obj name is anything like DetectorXXX, where XXX is a number
|
||||
xmlLabel = TString(obj->GetName());
|
||||
if (xmlLabel.BeginsWith("Detector")) {
|
||||
xmlLabel.Remove(0, 8); // remove 'Detector'
|
||||
if (xmlLabel.IsDigit())
|
||||
xmlLabel = "Detector";
|
||||
else
|
||||
xmlLabel = TString(obj->GetName());
|
||||
}
|
||||
|
||||
cout << endl << offsetStr << obj->GetName() << " (# " << obj->GetEntries() << ")";
|
||||
|
||||
xmlStr = offsetStr + "<" + xmlLabel + ">";
|
||||
xml_data.push_back(xmlStr.Data());
|
||||
|
||||
for (UInt_t i=0; i<obj->GetEntries(); i++) {
|
||||
// check if entry is a TObjArray
|
||||
type = obj->At(i)->ClassName();
|
||||
if (type == "TObjArray") {
|
||||
dumpObjArray((TObjArray*)(obj->At(i)), offset+2);
|
||||
} else { // not a TObjArray
|
||||
tstr = (TObjString*) obj->At(i);
|
||||
str = tstr->GetString();
|
||||
str.Remove(TString::kTrailing, '\n');
|
||||
|
||||
getType(str, type);
|
||||
getLabel(str, label);
|
||||
|
||||
cout << endl << offsetStr << i << ": " << str;
|
||||
|
||||
xmlStr = offsetStr + " " + "<" + label + ">" + type + "</" + label + ">" ;
|
||||
xml_data.push_back(xmlStr.Data());
|
||||
}
|
||||
}
|
||||
|
||||
xmlStr = offsetStr + "</" + xmlLabel + ">";
|
||||
xml_data.push_back(xmlStr.Data());
|
||||
}
|
||||
|
||||
void dumpEntry(TObject *obj, UInt_t offset)
|
||||
{
|
||||
TString offsetStr="";
|
||||
for (UInt_t i=0; i<offset; i++)
|
||||
offsetStr += " ";
|
||||
|
||||
TString nameTag(""), typeTag("");
|
||||
switch (folderTag) {
|
||||
case eDecayAnaModule:
|
||||
nameTag = "HistoName";
|
||||
typeTag = "HistoType";
|
||||
break;
|
||||
case eSlowControlAnaModule:
|
||||
nameTag = "SlowControlName";
|
||||
typeTag = "SlowControlType";
|
||||
break;
|
||||
case eUnkown:
|
||||
default:
|
||||
nameTag = "Name";
|
||||
typeTag = "Type";
|
||||
break;
|
||||
}
|
||||
|
||||
TString str;
|
||||
|
||||
str = offsetStr + "<" + nameTag + ">";
|
||||
str += obj->GetName();
|
||||
str += "</" + nameTag + ">";
|
||||
xml_data.push_back(str.Data());
|
||||
|
||||
str = offsetStr + "<" + typeTag + ">";
|
||||
str += obj->ClassName();
|
||||
str += "</" + typeTag + ">";
|
||||
xml_data.push_back(str.Data());
|
||||
}
|
||||
|
||||
void checkClass(TObject *obj, TString str, UInt_t offset)
|
||||
{
|
||||
TString offsetStr="";
|
||||
for (UInt_t i=0; i<offset; i++)
|
||||
offsetStr += " ";
|
||||
|
||||
if (str == "TFolder") {
|
||||
TString xmlTagName(TString(obj->GetName()));
|
||||
|
||||
// set folder tag
|
||||
if (!xmlTagName.CompareTo("DecayAnaModule"))
|
||||
folderTag = eDecayAnaModule;
|
||||
else if (!xmlTagName.CompareTo("SCAnaModule"))
|
||||
folderTag = eSlowControlAnaModule;
|
||||
else if (!xmlTagName.CompareTo("SCAnaModule"))
|
||||
folderTag = eSlowControlAnaModule;
|
||||
else
|
||||
folderTag = eUnkown;
|
||||
|
||||
offset += 2;
|
||||
str = offsetStr + "<" + xmlTagName + ">";
|
||||
xml_data.push_back(str.Data());
|
||||
|
||||
dumpFolder((TFolder*)obj, offset);
|
||||
|
||||
str = offsetStr + "</" + xmlTagName + ">";
|
||||
xml_data.push_back(str.Data());
|
||||
} else if (str == "TObjArray") {
|
||||
offset += 2;
|
||||
dumpObjArray((TObjArray*)obj, offset);
|
||||
} else {
|
||||
// filter out the proper entry tag
|
||||
TString entryTag("");
|
||||
switch (folderTag) {
|
||||
case eDecayAnaModule:
|
||||
entryTag = TString("DecayHistoEntry");
|
||||
break;
|
||||
case eSlowControlAnaModule:
|
||||
entryTag = TString("SlowControlHistoEntry");
|
||||
break;
|
||||
case eUnkown:
|
||||
default:
|
||||
entryTag = TString("Entry");
|
||||
break;
|
||||
}
|
||||
|
||||
offset += 2;
|
||||
str = offsetStr + "<" + entryTag + ">";
|
||||
xml_data.push_back(str.Data());
|
||||
dumpEntry((TObjArray*)obj, offset);
|
||||
str = offsetStr + "</" + entryTag + ">";
|
||||
xml_data.push_back(str.Data());
|
||||
}
|
||||
}
|
||||
|
||||
void getType(TString entry, TString &type)
|
||||
{
|
||||
if (entry.Contains("-@0")) {
|
||||
type = "TString";
|
||||
} else if (entry.Contains("-@1")) {
|
||||
type = "Int_t";
|
||||
} else if (entry.Contains("-@2")) {
|
||||
type = "Double_t";
|
||||
} else if (entry.Contains("-@3")) {
|
||||
type = "TMusrRunPhysicalQuantity";
|
||||
} else if (entry.Contains("-@4")) {
|
||||
type = "TStringVector";
|
||||
} else if (entry.Contains("-@5")) {
|
||||
type = "TIntVector";
|
||||
} else if (entry.Contains("-@6")) {
|
||||
type = "TDoubleVector";
|
||||
} else {
|
||||
type = "TString";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void getLabel(TString entry, TString &label)
|
||||
{
|
||||
label="no_idea";
|
||||
|
||||
Ssiz_t start = entry.First('-');
|
||||
Ssiz_t end = entry.First(':');
|
||||
|
||||
if ((start == -1) || (end == -1))
|
||||
return;
|
||||
|
||||
if (end - start < 2)
|
||||
return;
|
||||
|
||||
// check that '-@' is present in the string, otherwise it is NOT a known label
|
||||
Ssiz_t pos = entry.First('@');
|
||||
if (pos < 1)
|
||||
return;
|
||||
if (entry(pos-1) != '-')
|
||||
return;
|
||||
|
||||
// cut out value
|
||||
label = entry;
|
||||
label.Remove(0, start+2);
|
||||
label.Remove(end-start-2, label.Length());
|
||||
|
||||
label.ReplaceAll(' ', '_'); // replace spaces through underscores
|
||||
label.ReplaceAll('(', '_'); // replace '(' through underscores
|
||||
label.ReplaceAll(')', '_'); // replace ')' through underscores
|
||||
label.ReplaceAll('[', '_'); // replace '[' through underscores
|
||||
label.ReplaceAll(']', '_'); // replace ']' through underscores
|
||||
label.ReplaceAll('{', '_'); // replace '[' through underscores
|
||||
label.ReplaceAll('}', '_'); // replace ']' through underscores
|
||||
}
|
||||
Reference in New Issue
Block a user