Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:23:58

0001 #!/bin/env perl
0002 #
0003 # Replaces for fast simulation
0004 #
0005 # Usage: $0 <file> <replaces file>
0006 #        Replaces in <file> from <replaces file>
0007 
0008 use strict;
0009 
0010 die "Usage: $0 <file> <replaces>\n" if ( @ARGV != 2 );
0011 
0012 my $cfgFile = $ARGV[0];
0013 my $replaceFile = $ARGV[1];
0014 
0015 my %replaces;
0016 
0017 # Get list of replaces
0018 open(IN,$replaceFile) or die "Couldn't open $replaceFile: $!";
0019 while( <IN> ) {
0020   if ( /replace\s+(\S+)(\s*=.*)[#|\/\/]?/ ) {
0021     my $key   = $1;
0022     my $value = $2;
0023     # Check for multi-line value
0024     while ( &countBraces($value) > 0 ) {
0025       my $line = <IN>;
0026       $value .= $line;
0027     }
0028     $replaces{$key} = $value;
0029   }
0030 }
0031 close(IN);
0032 
0033 # Open temporary file
0034 my $temp = $cfgFile.".tmp";
0035 open(TEMP,">$temp") or die "Couldn't open $temp: $!";
0036 
0037 # Scan cfgfile and replace
0038 open(CFG,$cfgFile) or die "Couldn't open $cfgFile: $!";
0039 while ( <CFG> ) {
0040   chomp();
0041   my $line = $_;
0042   my $matched = 0;
0043   foreach my $replace ( keys %replaces ) {
0044     next if ( !$replaces{$replace} );
0045     if ( $line =~ /$replace/ ) {
0046       print TEMP "replace ".$replace.$replaces{$replace}."\n";
0047       $replaces{$replace} = 0;
0048       ++$matched;
0049       last;
0050     }
0051   }
0052   if ( !$matched ) {
0053     print TEMP $line."\n";
0054   }
0055 }
0056 close(CFG);
0057 
0058 
0059 # Add missing items at the end of file (things that are only replaced in FastSim)
0060 # Print header
0061 print TEMP <<HEADER
0062 ############################
0063 # Fast simulation replaces #
0064 ############################
0065 HEADER
0066 ;
0067 foreach my $replace ( keys %replaces ) {
0068   next if ( !$replaces{$replace} );
0069   print TEMP "replace ".$replace.$replaces{$replace}."\n";
0070 }
0071 close(TEMP) or die "Couldn't close $temp: $!";
0072 rename($temp,$cfgFile);
0073 
0074 
0075 #______________________________________________________________________
0076 # Count number of braces
0077 # Opening adds one, closing removes one
0078 sub countBraces {
0079 
0080   my $string = shift;
0081   my $nBraces = 0;
0082   my $char = "";
0083 
0084   while ( length($string)>0 ) {
0085     $char = chop($string);
0086     ++$nBraces if ( $char =~ /\{/ );
0087     --$nBraces if ( $char =~ /\}/ );
0088   }
0089 
0090   return $nBraces;
0091 
0092 }