Buonasera,
sto costruendo un piccolo script in Perl che faccia le seguenti cose:
- apra ROOT
- carichi una macro con il comando .L nomemacro.cc
- esegua la macro con il comando nomemacro("nomefile_in", "nomefile_out")
per ogni file presente in una certa cartella. Però non funziona, ma non so dove sbaglio. Si pianta dopo aver scritto "root -l". Forse è un problema legato a root?
I comandi che vorrei far partire automaticamente con questo script sono:
root -l
.L C14TotalFit.cc
C14TotalFit("/home/rootfiles/nomefile.root", "/home/results/nomefile.root.txt")
Mille graziecodice:#!/usr/bin/perl use strict; use warnings; use File::Basename; use Cwd; my $infile_path = '/home/rootfiles'; my $outfile_path = '/home/results'; my $here = getcwd; foreach my $arg (@ARGV){ if (($arg =~ /^help$/i) || ($arg =~/^usage$/i)){ #usage(); exit; } elsif ($arg =~ /^infile_path\=(\w+)/){ $infile_path = $1; } elsif ($arg =~ /^outfile_path\=(\w+)/){ $outfile_path = $1; } else { die " ERROR: unknown parameter $arg \n"; } } chdir $infile_path or die "Cannot chroot to $infile_path: $!\n"; my @files = glob($infile_path."/*.root"); foreach my $file (@files){ my $init = "root -l"; print $init."\n"; `$init`; my $load = ".L ${here}/C14TotalFit.cc"; print $load."\n"; `$load`; my $cmd = "C14TotalFit(\""; $cmd = $cmd.$infile_path.'/'; $cmd = $cmd.basename($file); $cmd = $cmd."\", \""; $cmd = $cmd.$outfile_path.'/'; $cmd = $cmd.basename($file); $cmd = $cmd.".txt"; $cmd = $cmd."\")'"; print $cmd."\n"; `$cmd`; }

Rispondi quotando