File indexing completed on 2024-04-06 12:19:22
0001
0002
0003 exec tclsh "$0" ${1+"$@"}
0004
0005
0006
0007
0008
0009
0010 set inputdir "/afs/cern.ch/user/i/igv/local/src/npstat-3.0.0"
0011 set packagedir "/afs/cern.ch/user/i/igv/CMSSW_7_1_X_2014-03-22-1400/src/JetMETCorrections/InterpolationTables"
0012
0013
0014 set includemap [list "\#include \"geners/" "\#include \"Alignment/Geners/interface/"]
0015 lappend includemap "\#include \"npstat/stat/" "\#include \"JetMETCorrections/InterpolationTables/interface/"
0016 lappend includemap "\#include \"npstat/nm/" "\#include \"JetMETCorrections/InterpolationTables/interface/"
0017
0018
0019 lappend includemap std::out_of_range npstat::NpstatOutOfRange
0020 lappend includemap std::invalid_argument npstat::NpstatInvalidArgument
0021 lappend includemap std::runtime_error npstat::NpstatRuntimeError
0022 lappend includemap std::domain_error npstat::NpstatDomainError
0023 lappend includemap "\#include <stdexcept>" "\#include \"JetMETCorrections/InterpolationTables/interface/NpstatException.h\""
0024
0025 proc file_contents {filename} {
0026 set chan [open $filename "r"]
0027 set contents [read $chan [file size $filename]]
0028 close $chan
0029 set contents
0030 }
0031
0032 proc filemap {infile outfile map} {
0033 set in_data [file_contents $infile]
0034 set chan [open $outfile "w"]
0035 puts -nonewline $chan [string map $map $in_data]
0036 close $chan
0037 }
0038
0039 proc find_npstat_file {header {addh 1}} {
0040 global inputdir
0041 if {$addh} {
0042 set hh "${header}h"
0043 } else {
0044 set hh $header
0045 }
0046 set dirlist [list [file join $inputdir npstat nm] \
0047 [file join $inputdir npstat stat]]
0048 foreach dir $dirlist {
0049 set htry [file join $dir $hh]
0050 if {[file readable $htry]} {
0051 return $htry
0052 }
0053 }
0054 error "Failed to find npstat file $hh"
0055 }
0056
0057
0058 proc is_icc_line {line} {
0059 set trline [string trim $line]
0060 if {[string first "\#include" $trline] != 0} {
0061 return 0
0062 }
0063 if {[string compare [string range $trline end-4 end] ".icc\""]} {
0064 return 0
0065 }
0066 return 1
0067 }
0068
0069 proc icc_contents {icc_line icc_dir} {
0070 set trline [string trim $icc_line]
0071 set fname [string trim [lindex [split $trline /] end] "\""]
0072 file_contents [file join $icc_dir $fname]
0073 }
0074
0075 proc insert_icc {infile outfile icc_dir} {
0076 set output [list]
0077 foreach line [split [file_contents $infile] "\n"] {
0078 if {[is_icc_line $line]} {
0079 lappend output [icc_contents $line $icc_dir]
0080 } else {
0081 lappend output $line
0082 }
0083 }
0084 set chan [open $outfile "w"]
0085 puts $chan [join $output "\n"]
0086 close $chan
0087 }
0088
0089
0090 proc remove_swig {infile outfile} {
0091 set in_swig 0
0092 set output [list]
0093 set ifdef_count 0
0094 foreach line [split [file_contents $infile] "\n"] {
0095 set tline [string trim $line]
0096 if {!$in_swig} {
0097 if {[string equal $tline "#ifdef SWIG"]} {
0098 set in_swig 1
0099 }
0100 }
0101 if {$in_swig} {
0102 if {[string equal -length 6 $tline "#endif"]} {
0103 incr ifdef_count -1
0104 if {$ifdef_count == 0} {
0105 set in_swig 0
0106 }
0107 }
0108 if {[string equal -length 6 $tline "#ifdef"]} {
0109 incr ifdef_count
0110 }
0111 if {[string equal -length 7 $tline "#ifndef"]} {
0112 incr ifdef_count
0113 }
0114 } else {
0115 lappend output $line
0116 }
0117 }
0118 set chan [open $outfile "w"]
0119 puts -nonewline $chan [join $output "\n"]
0120 close $chan
0121 }
0122
0123
0124 proc fix_naming_convention {infile outfile} {
0125 set output [list]
0126 set target "\#include \"JetMETCorrections/InterpolationTables/interface/"
0127 set tlen [string length $target]
0128 foreach line [split [file_contents $infile] "\n"] {
0129 set trline [string trim $line]
0130 if {[string equal -length 8 $trline "// \\file"]} {
0131 set line [string range $trline 0 end-1]
0132 } elseif {[string equal -length $tlen $trline $target]} {
0133 set tail [string range $trline end-3 end-1]
0134 if {[string equal $tail ".hh"]} {
0135 set line [string range $trline 0 end-2]
0136 append line "\""
0137 }
0138 }
0139 lappend output $line
0140 }
0141 set chan [open $outfile "w"]
0142 puts -nonewline $chan [join $output "\n"]
0143 close $chan
0144 }
0145
0146
0147 proc replace_lines {infile outfile from to replacement} {
0148 set output [list]
0149 set linenum 1
0150 foreach line [split [file_contents $infile] "\n"] {
0151 set skip 0
0152 set replace 0
0153 if {$linenum >= $from && $linenum <= $to} {
0154 set skip 1
0155 }
0156 if {$skip} {
0157 if {$linenum == $to} {
0158 set replace 1
0159 }
0160 }
0161 if {$replace} {
0162 lappend output $replacement
0163 }
0164 if {!$skip} {
0165 lappend output $line
0166 }
0167 incr linenum
0168 }
0169 set chan [open $outfile "w"]
0170 puts $chan [join $output "\n"]
0171 close $chan
0172 }
0173
0174 proc tempfile {dir} {
0175 set chars "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
0176 set nrand_chars 10
0177 set maxtries 10
0178 set access [list RDWR CREAT EXCL TRUNC]
0179 set permission 0600
0180 set channel ""
0181 set checked_dir_writable 0
0182 set mypid [pid]
0183 for {set i 0} {$i < $maxtries} {incr i} {
0184 set newname ""
0185 for {set j 0} {$j < $nrand_chars} {incr j} {
0186 append newname [string index $chars \
0187 [expr ([clock clicks] ^ $mypid) % 62]]
0188 }
0189 set newname [file join $dir $newname]
0190 if {[file exists $newname]} {
0191 after 1
0192 } else {
0193 if {[catch {open $newname $access $permission} channel]} {
0194 if {!$checked_dir_writable} {
0195 set dirname [file dirname $newname]
0196 if {![file writable $dirname]} {
0197 error "Directory $dirname is not writable"
0198 }
0199 set checked_dir_writable 1
0200 }
0201 } else {
0202
0203 close $channel
0204 return $newname
0205 }
0206 }
0207 }
0208 if {[string compare $channel ""]} {
0209 error "Failed to open a temporary file: $channel"
0210 } else {
0211 error "Failed to find an unused temporary file name"
0212 }
0213 }
0214
0215
0216 set header_list [list \
0217 AbsArrayProjector.h \
0218 absDifference.h \
0219 AbsMultivariateFunctor.h \
0220 AbsVisitor.h \
0221 allocators.h \
0222 ArrayND.h \
0223 ArrayNDScanner.h \
0224 ArrayRange.h \
0225 ArrayShape.h \
0226 BoxND.h \
0227 BoxNDScanner.h \
0228 CircularMapper1d.h \
0229 closeWithinTolerance.h \
0230 ComplexComparesAbs.h \
0231 ComplexComparesFalse.h \
0232 convertAxis.h \
0233 CoordinateSelector.h \
0234 DualAxis.h \
0235 DualHistoAxis.h \
0236 EquidistantSequence.h \
0237 GridAxis.h \
0238 HistoAxis.h \
0239 HistoNDFunctorInstances.h \
0240 HistoND.h \
0241 interpolate.h \
0242 interpolateHistoND.h \
0243 InterpolationFunctorInstances.h \
0244 Interval.h \
0245 isMonotonous.h \
0246 LinearMapper1d.h \
0247 LinInterpolatedTableND.h \
0248 MultivariateFunctorScanner.h \
0249 NUHistoAxis.h \
0250 PreciseType.h \
0251 ProperDblFromCmpl.h \
0252 rescanArray.h \
0253 SimpleFunctors.h \
0254 StorableHistoNDFunctor.h \
0255 StorableInterpolationFunctor.h \
0256 StorableMultivariateFunctor.h \
0257 StorableMultivariateFunctorReader.h \
0258 UniformAxis.h]
0259
0260 set cc_list [list \
0261 ArrayNDScanner.cc \
0262 ArrayRange.cc \
0263 ArrayShape.cc \
0264 convertAxis.cc \
0265 DualAxis.cc \
0266 DualHistoAxis.cc \
0267 EquidistantSequence.cc \
0268 GridAxis.cc \
0269 HistoAxis.cc \
0270 NUHistoAxis.cc \
0271 StorableMultivariateFunctor.cc \
0272 StorableMultivariateFunctorReader.cc \
0273 UniformAxis.cc]
0274
0275
0276 foreach header $header_list {
0277 set from_header [find_npstat_file $header]
0278 set to_header [file join "$packagedir/interface" $header]
0279 set tempfile [tempfile /tmp]
0280 insert_icc $from_header $tempfile [file dirname $from_header]
0281 remove_swig $tempfile $tempfile
0282 filemap $tempfile $to_header $includemap
0283 fix_naming_convention $to_header $to_header
0284 file delete $tempfile
0285 }
0286
0287 foreach cc $cc_list {
0288 set fromfile [find_npstat_file $cc 0]
0289 set outfile [file join "$packagedir/src" $cc]
0290 filemap $fromfile $outfile $includemap
0291 fix_naming_convention $outfile $outfile
0292 }