This file is indexed.

/usr/share/xcrysden/Tcl/propInit.tcl is in xcrysden-data 1.5.60-1build3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
#############################################################################
# Author:                                                                   #
# ------                                                                    #
#  Anton Kokalj                                  Email: Tone.Kokalj@ijs.si  #
#  Department of Physical and Organic Chemistry  Phone: x 386 1 477 3523    #
#  Jozef Stefan Institute                          Fax: x 386 1 477 3811    #
#  Jamova 39, SI-1000 Ljubljana                                             #
#  SLOVENIA                                                                 #
#                                                                           #
# Source: $XCRYSDEN_TOPDIR/Tcl/propInit.tcl                                       
# ------                                                                    #
# Copyright (c) 1996-2014 by Anton Kokalj                                   #
#############################################################################

###############################################
# prop(unit9) .. name of Crystal95's unit 9 - it's path
# prop(unit25_1).name of first Crystal95's unit25 on it's scratch directory
# prop(unit25_2).name of second Crystal95's unit25
# prop(dir) .... name of directory, where fortran units are stored
# prop(file) ... name of fortran unit (without possix)
# prop(n_band) . number of bands
# prop(band) ... selected bands 
# prop(firstband) ... first band for BWID
# prop(lastband)  ... last band for BWID
# prop(newk)      ... 0 = newk not yet set; 1 = newk already set
# prop(newk_script) . newk's script
# prop(doss_criteria) "band-interval criteria" or "energy-interval criteria" 
# prop(n_atom) ...... number of atoms per shell
# prop(type_of_run) . RHF/UHF
##########
# prop(NPY)    ...... number of point along B-A segment (used by C95 by 2D grid
#                     points evaluation
# prop(NPZ)    ...... number of point along third segment (used by C95 by 
#                     3D grid points evaluation
# prop(datagridDim) ..... dimensionality of datagrid
# prop(isolevel)..... isolevel to extract in 3D isosurface evaluation
# prop(pm_isolevel).. whether to render +/- of isolevel
##########
# prop(dif_prop3D_list) .... list of properties that can be rendered as 
#                            isosurface difference maps
# prop(spin_prop_list)  .... list of spin dependent properties
# prop(spin_case)       .... 0/1; we may deal with UHF & spin-undependent 
#                            property and so prop(spin_case) is zero
# prop(PATO_newbasis_A) .... when we select density matrix to be superposition
#                            of atomic densities, than we can specify new basis
#                            set 
# prop(PATO_newbasis_B) .... when using difference maps or properties on 
#                            surfaces we have to cards (A & B)
##########
# prop(c95_BAND_script) .... script for band structure for c95's properties
# prop(NLINE)           .... # of lines in reciprocal space to be explored
###############################################
###############################################
# dif_isosurf(dif_map)              0/1; 1 when diffrential map is on
# dif_isosurf(denmat_A)             what density matrix_A to take 
# dif_isosurf(file_textvar_A)       label_text for left frame; 
# dif_isosurf(prop_A)               properties A
# dif_isosurf(spin_A)               spin A
########## 
# dif_isosurf(load_another_unit9)   1 if another unit9 is reqursted; else 0
# dif_isosurf(unit9_B)              another unit9
# dif_isosurf(file_textvar_B)       label text for right frame
# dif_isosurf(prop_B)               properties B
# dif_isosurf(denmat_B)             what density matrix_B to take
# dif_isosurf(spin_B)               spin B
###############################################
# for definition of ISOSURF array luks in "grid.tcl" file
###############################################


##############################################################################
# THIS PROC IS CALLED WHEN WE OPEN CRYSTAL PROPERTIES
##############################################################################

proc PropC95 {{path {}}} {
    global prop system err periodic nxdir nydir nzdir \
	    dif_isosurf xcMisc

    # some initializations

    PropC95Init
    GraphInit

    if { $path == "" } {
	set path [fileselect {Open CRYSTAL's unit 9}]
    }

    if { $path == "" } {
	return
    }

    xcAppendState c95
    xcAppendState properties
    xcUpdateState

    #
    # update the title of toplevel
    #
    wm title . "XCrySDen: [file tail $path]"
    set xcMisc(titlefile) [file tail $path]

    set prop(unit9) $path
    append dif_isosurf(file_textvar_A) $path; #now we completed we element
    # this is just for now
    set prop(dir) $system(SCRDIR)
    
    ########################################
    # CD to $system(SCRDIR)
    cd $system(SCRDIR)
    
    #catch {file delete -force __fort_unit}
    #file mkdir __fort_unit
    #cd __fort_unit
    
    # find out what is the name of fortran units (without number)    
    set prop(file) [FtnName].
    puts stderr $prop(file)
    
    cd $system(SCRDIR)

    # now copy prop(unit9) to $prop(dir)/$prop(file)9
    file copy -force $prop(unit9) $system(SCRDIR)/$prop(file)9

    # now we will get some info about \"case\" and we will render a structure
    set input "BASE\n0\nEXTPRT\nCOORPRT\nEND"
    if { ! [RunC95 $system(c95_properties) {} $input {} {} $system(SCRDIR)] } {
	#tk_dialog .err "ERROR" "ERROR: $err" error 0 OK
	return
    }
    
    GetC95Info EXTPRT $system(SCRDIR)/xc_struc.$system(PID)
    GetC95Info TYPE_OF_RUN $system(SCRDIR)/xc_output.$system(PID)

    puts stderr "Dimension of system: $periodic(dim)"

    # maybe structure is not 3 dimensional
    if { $periodic(dim) < 3 } { set nzdir 0 }
    if { $periodic(dim) < 2 } { set nydir 0 }
    if { $periodic(dim) < 1 } { set nxdir 0 }

    xcAppendState render
    xcUpdateState
    GenGeomDisplay
    OpenStruct .mesa $system(SCRDIR)/xc_struc.$system(PID)
}


proc PropC95Init {} {
    global prop dif_isosurf isosurf openGL

    if [array exists prop]        { unset prop }
    if [array exists dif_isosurf] { unset dif_isosurf }

    # initialize prop array
    set prop(newk) 0
    set prop(NPRO) 0
    set prop(PATO_newbasis_A) 0
    set prop(PATO_newbasis_B) 0
    set prop(datagridDim)     0

    #set prop(dif_prop3D_list) { \
    #	     {CHARGE DENSITY} \
    #	     {CHARGE DENSITY GRADIENT} \
    #	     {ELECTROSTATIC POTENTIAL} }

    set prop(dif_prop3D_list) { \
	    {CHARGE DENSITY} \
	    {ELECTROSTATIC POTENTIAL} }

    set prop(spin_prop_list) {ECHD "ECHG\n0"}
    set prop(isolevel)       {}
    set prop(pm_isolevel)    0

    # initialize dif_isosurf array
    set dif_isosurf(denmat_A)            "SCF density matrix"
    set dif_isosurf(load_another_unit9)  0
    set dif_isosurf(file_textvar_A)      "default UNIT 9:\n"
    set dif_isosurf(denmat_B) \
	    "Density matrix as superposition of atomic densities"
    set dif_isosurf(file_textvar_B)      "loaded UNIT 9:\nsame as in Map A"

    # initialization of dif_isosurf array
    SetIsoSurfArray
    ConvertTwoSideVar; # this is to switch isosurf(twoside_lighting) from 0/1 -> on/off
}


proc GetC95Info {whatlist file {dir {}}} {
    global system periodic geng prop

    if { $dir == {} } {
	########################################
	# CD to $system(SCRDIR)
	cd $system(SCRDIR)
	########################################
    } else {
	cd $dir
    }

    # whatlist:: lists of "whats" type of info needed
    foreach what $whatlist {
	if { $what == "EXTPRT" } {
    # usage of "gengeom" program:
    # 
    # gengeom  MODE1  MODE2  MODE3  IGRP  NXDIR  NYDIR  NZDIR  OUTPUT  INPUT
    #    0       1      2      3      4     5      6      7      8       9
    #
    # FIND FROM UNIT34 THE DIMENSIONALITY OF THE SYSTEM

	    if { $system(c95_version) == "95" } {
		set geng(M3_ARGUMENT) [GetGengM3Arg BOHR 95]
	    } elseif { $system(c95_version) == "98" } {
		set geng(M3_AGRUMENT) [GetGengM3Arg ANGS 98]
	    } elseif { $system(c95_version) == "03" } {
		set geng(M3_AGRUMENT) [GetGengM3Arg ANGS 03]
	    } elseif { $system(c95_version) == "06" } {
		set geng(M3_AGRUMENT) [GetGengM3Arg ANGS 06]
	    } elseif { $system(c95_version) == "09" } {
		set geng(M3_AGRUMENT) [GetGengM3Arg ANGS 09]
	    } elseif { $system(c95_version) == "14" } {
		set geng(M3_AGRUMENT) [GetGengM3Arg ANGS 14]
	    } 	    
		
	    set file $system(SCRDIR)/xc_gengeom.$system(PID)
	    xcCatchExecReturn $system(BINDIR)/gengeom $geng(M1_INFO) 1 $geng(M3_ARGUMENT) 1  1 1 1 $file

	    set fileID [open $file r]
	    GetDimGroup periodic(dim) periodic(igroup) $fileID
	    close $fileID	    
	    
	    puts stdout "dim igroup:: $periodic(dim) $periodic(igroup)"
	}
	if { $what == "BWID" || $what == "DOSS" || $what == "BAND" } {
	    # find out the number of bands
	    set fileID [open $file r]
	    foreach line [split [read $fileID] \n] {		
		if [string match "*NUMBER OF AO*" $line] {
		    set prop(n_band) [lindex $line 3]
		}
		if [string match "*N\. OF ATOMS PER CELL*" $line] {
		    set prop(n_atom) [lindex $line 5]
		}
	    }	
	    close $fileID
	}
	if { $what == "TYPE_OF_RUN" } {
	    # allowed prop(type_of_run) values: UHF/RHF
	    set fileID [open $file r]
	    foreach line [split [read $fileID] \n] {		
		if { [string match "*TYPE OF CALCULATION*" $line] } {
		    if { $system(c95_version) == "03" || $system(c95_version) == "06" || $system(c95_version) == "09" || $system(c95_version) == "14" } {
			#
			# CRYSTAL03/06/09/14
			#
			if { [string match "*UNRESTRICTED*" $line] } {
			    set prop(type_of_run) UHF
			} else {
			    set prop(type_of_run) RHF
			}
		    } else {
			#
			# CRYSTAL-95/98
			#
			set prop(type_of_run) [lindex $line end]
		    }
		    xcDebug -stderr "Type of CRYSTAL run: $prop(type_of_run)"
		}
	    }
	}
    }
}