Skip to content
Snippets Groups Projects
Commit daa8ede4 authored by Julian Pychy's avatar Julian Pychy
Browse files

added a script to fix parameters

parent 6df78d34
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/perl
#************************************************************************#
# #
# Copyright 2014 Bertram Kopf (bertram@ep1.rub.de) #
# Julian Pychy (julian@ep1.rub.de) #
# - Ruhr-Universität Bochum #
# #
# This file is part of Pawian. #
# #
# Pawian 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 3 of the License, or #
# (at your option) any later version. #
# #
# Pawian 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 Pawian. If not, see <http:#www.gnu.org/licenses/>. #
# #
#************************************************************************#
#######################################################
## ##
## pawianfixparameters ##
## ##
## This script generated the mnParFix list to be ##
## used in the Pawian configuration file. ##
## ##
## - Julian Pychy julian@ep1.rub.de ##
## ##
#######################################################
use strict;
use warnings;
use Getopt::Long;
my $showHelp=0;
my $filename="";
my $prio="";
GetOptions ("help|h" => \$showHelp,
"file=s" => \$filename,
"prio=s" => \$prio) or die "Bad arguments!";
if($showHelp){
Help();
exit;
}
if($filename eq "" || !(-e $filename)){
die "File not found.";
}
# Read the parameter file
open FILE, "<", $filename or die $!;
my @linesInFile;
while (<FILE>) {
push(@linesInFile, $_);
}
close FILE;
my @fixedproddec = FixProductionsAndDecays(\@linesInFile);
my @fixedisos = FixIsos(\@linesInFile);
my @fixedphase = Fixpbarp(\@linesInFile);
my @fixedpipiswave = FixPiPiSWave(\@linesInFile);
my @fixedkpiswave = FixKPiSWaveI12(\@linesInFile);
push(@fixedkpiswave, FixKPiSWaveI32(\@linesInFile));
my @fixedgenerickmatrix = FixGenericKMatrix(\@linesInFile);
my $numfixedproddec = @fixedproddec;
my $numfixedphase = @fixedphase;
my $numfixedpipiswave = @fixedpipiswave;
my $numfixedkpiswave = @fixedkpiswave;
my $numfixedisos = @fixedisos;
my $numfixedgenerickmatrix = @fixedgenerickmatrix;
my $numfixed = $numfixedproddec + $numfixedphase + $numfixedgenerickmatrix +
$numfixedpipiswave + $numfixedkpiswave + $numfixedisos;
print "\n\n";
print "##################################################\n";
print "## ##\n";
print "## Output from the pawianfixparameters script ##\n";
print "## ##\n";
print "##################################################\n";
print "#\n";
print "# Fixing $numfixed parameters\n";
print "#\n";
print "# !! The following list is given without any !!\n";
print "# !! guarantee and has to be checked by the analyst !!\n";
print "#\n\n";
my $fixedline;
print "##################################################\n";
print "# Fixing one pbarp singlet and one triplet phase #\n";
print "##################################################\n";
foreach $fixedline (@fixedphase){
print "mnParFix = ".$fixedline."\n";
}
print "\n";
print "##################################################\n";
print "# Fixing $numfixedproddec production and decay parameters\n";
print "##################################################\n";
foreach $fixedline (@fixedproddec){
print "mnParFix = ".$fixedline."\n";
}
print "\n";
print "##################################################\n";
print "# Fixing $numfixedisos isospin parameters\n";
print "##################################################\n";
foreach $fixedline (@fixedisos){
print "mnParFix = ".$fixedline."\n";
}
print "\n";
print "##################################################\n";
print "# Fixing $numfixedpipiswave PiPiS-wave parameters\n";
print "##################################################\n";
foreach $fixedline (@fixedpipiswave){
print "mnParFix = ".$fixedline."\n";
}
print "\n";
print "##################################################\n";
print "# Fixing $numfixedkpiswave KPiS-wave parameters\n";
print "##################################################\n";
foreach $fixedline (@fixedkpiswave){
print "mnParFix = ".$fixedline."\n";
}
print "\n";
print "##################################################\n";
print "# Fixing $numfixedgenerickmatrix generic k-matrix parameters\n";
print "##################################################\n";
foreach $fixedline (@fixedgenerickmatrix){
print "mnParFix = ".$fixedline."\n";
}
sub FixProductionsAndDecays
{
my @linesInFile = @{$_[0]};
my @fixedParams;
my @fixedSources;
foreach my $currentLine (@linesInFile){
if($currentLine =~ /Matrix/){
next;
}
if($currentLine =~ /(.*_(.*)To(.*))Mag.*/ ){
my $currentSource = $2;
my $currentDest = $3;
my $found = 0;
if(grep $_ eq $currentSource, @fixedSources){
$found = 1;
}
# Fix the priority system instead of this one
elsif(!($currentDest eq $prio)){
foreach my $alternative(@linesInFile){
if( $alternative =~ /(.*_(.*)To(.*))Mag.*/ ){
if(($currentSource eq $2) && ($prio eq $3)){
$found = 1;
last;
}
}
}
}
if($found == 0){
push(@fixedSources, $currentSource);
push(@fixedParams, $1."Mag");
push(@fixedParams, $1."Phi");
}
}
}
return @fixedParams;
}
sub FixIsos
{
my @linesInFile = @{$_[0]};
my @fixedParams;
my @fixedSources;
foreach my $currentLine (@linesInFile){
if( $currentLine =~ /(Iso.+)\s+(\S+)\s+\S+/){
push(@fixedParams, $1);
}
}
return @fixedParams;
}
sub Fixpbarp
{
my @linesInFile = @{$_[0]};
my @fixedParams;
my @fixedSources;
my $pbarpSingletIsFixed=0;
my $pbarpTripletIsFixed=0;
foreach my $currentLine (@linesInFile){
# Fix pbarp phases
if($currentLine =~ /(J.+P(.+)C(.+)L.+S.+pbarpPhi).*/){
if((($2 eq "1" && $3 eq "1") || ($2 eq "-1" && $3 eq "-1")) && $pbarpTripletIsFixed == 0){
push(@fixedParams, $1);
$pbarpTripletIsFixed = 1;
}
elsif((($2 eq "1" && $3 eq "-1") || ($2 eq "-1" && $3 eq "1")) && $pbarpSingletIsFixed == 0){
push(@fixedParams, $1);
$pbarpSingletIsFixed = 1;
}
}
}
if(!$pbarpSingletIsFixed || !$pbarpTripletIsFixed){
die "Failed to fix pbarp phases.";
}
return @fixedParams;
}
sub FixPiPiSWave
{
my @linesInFile = @{$_[0]};
my @fixedParams;
my @fixedSources;
foreach my $currentLine (@linesInFile){
if( $currentLine =~ /(.*_(.*)TopipiS.*)Mag.*/ ){
my $currentSource = $2;
if(!(grep $_ eq $currentSource, @fixedSources)){
push(@fixedSources, $currentSource);
push(@fixedParams, $1."Mag");
push(@fixedParams, $1."Phi");
}
}
elsif( $currentLine =~ /(pipiS.*S0_PosNegOther).*/){
push(@fixedParams, $1);
}
}
return @fixedParams;
}
sub FixKPiSWaveI12
{
my @linesInFile = @{$_[0]};
my @fixedParams;
foreach my $currentLine (@linesInFile){
if( $currentLine =~ /(.*_(.*)ToKpiS12_.*)Mag.*/ ){
my $currentSource = $2;
push(@fixedParams, $1."Mag");
push(@fixedParams, $1."Phi");
}
}
return @fixedParams;
}
sub FixKPiSWaveI32
{
my @linesInFile = @{$_[0]};
my @fixedParams;
foreach my $currentLine (@linesInFile){
if($currentLine =~ /(.*_(.*)ToKpiS32_.*)Mag.*/ ){
my $currentSource = $2;
push(@fixedParams, $1."Mag");
push(@fixedParams, $1."Phi");
}
}
return @fixedParams;
}
sub FixGenericKMatrix
{
my @linesInFile = @{$_[0]};
my @fixedParams;
my @fixedJPCKMat;
foreach my $currentLine (@linesInFile){
if($currentLine =~ /(.*Matrix.*To.*)Mag/){
push(@fixedParams, $1."Mag");
push(@fixedParams, $1."Phi");
}
elsif($currentLine =~ /(.*_(.*To.*Matrix.*))Mag/){
if(grep $_ eq $2, @fixedJPCKMat){
next;
}
push(@fixedParams, $1."Mag");
push(@fixedParams, $1."Phi");
push(@fixedJPCKMat, $2);
}
}
return @fixedParams;
}
sub Help
{
print STDERR <<INLINE_LITERAL_TEXT;
NAME
pawianfixparameters - automatically fix parameters for PAWIAN Partial Wave Analyses
SYNOPSIS
pawianfixparameters -f <file> [-p <priority>]
OPTIONS
-h | --help Show this help
-f | --file Select the file containing the fit parameters
-p | --prio Set a priority production system that becomes fixed
rather than another system
EXAMPLES
pawianfixparameters -f defaultparams.dat
pawianfixparameters -f myparams.dat -prio "K*K"
#Fixes K*K amplitudes instead of K*(1430)K amplitudes
INLINE_LITERAL_TEXT
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment